I have written a little test program to help me diagnose a problem I have seen in a live environment, but I am a bit confused by the myriad of configurable settings with JBoss MQ, and even more confused by the fact that none of them make any difference.
The environment is JBoss 4.0.,4.
In the live environment, a JMS connection from a standalone Java application to a JBoss MQ Topic (serviced by an MDB) on a remote machine is being lost. I do not have any information available as to why it is being lost (and the exception listener kicking in).
So I created a test environment with a Java application that sends TextMessages (containing an incrementing number) to a Topic on a remote JBoss.
All that the MDB code does is print the number in the TextMessage.
The first thing that I noticed is that the the thread that prints is called "JMS SessionPool Worker-XX", where XX is 0 to 32.
When I run the sender application again, the value of XX is 32 to 46. And a third run, the value is 46 to 60. The pattern is always the same - more threads used for the first run after JBoss has started, and 14 or 15 threads on subsequent runs.
So, question 1: Is there an explanation for that pattern?
During the run, which sends about 15,000 messages, the jms_messages table builds up on the JBoss machine. That means that JBoss MQ can't keep up, right? I assumed that the memory must be going above the threshold specified in the MessageCache MBean definition in mysql-jdbc2-service.xml. But when I monitor the JVM memory, it is nowhere near the 150MB value specified for HighMemoryMark. I guess I misunderstood this comment around the definition of MessadeCache bean: "Once the JVM memory usage hits the high memory mark, the old messages in the cache will start getting stored in the DataDirectory". I thought it meant that when heap usage got to 150MB, messages received would start being written to jms_messages, but clearly I got that wrong.
Question 2: what are the circumstances in which JBoss MQ starts writing to jms_messages?
And one last question - how does the container configuration setting below relate to the number of threads I am seeing processing the messages?