1. Start a JBoss Server, which open a message topic "testTopic"
2. Start a standalone Java program (a message listener) and define the Log4J JMSAppender level to "DEBUG" (for standalone Java Program). We want publish the Message Listener's debug info. to JBoss server.
3. After the console print out the follwing message, the program (message listener), hang forever
[java] DEBUG referenceable.SpyConnectionFactoryObjectFactory - Extracting
SpyConnectionFactory from reference
[java] DEBUG referenceable.SpyConnectionFactoryObjectFactory - The Generic
ConnectionFactory is: GenericConnectionFactory:[server=org.jboss.mq.il.oil.OILSe
rverIL@17a8a02,connectionProperties={OIL_TCPNODELAY_KEY=yes, PingPeriod=60000, O
IL_PORT_KEY=8090, ClientILService=org.jboss.mq.il.oil.OILClientILService, OIL_AD
DRESS_KEY=192.168.203.39}]
[java] DEBUG mq.Connection - Setting the clockDaemon's thread factory
[java] DEBUG mq.GenericConnectionFactory - Handing out ClientIL: org.jboss
.mq.il.oil.OILClientILService
[java] DEBUG oil.OILClientILService - Waiting for the server to connect to
me on port 1298
4. If we only set the level to "INFO", the above message not shown (because they are in DEBUG level) and program runs correctly.
5. Question is: WHY that happened? and what are oil.OILClientILService doing when it try to print
[java] DEBUG oil.OILClientILService - Waiting for the server to connect to
me on port 1298
6. Is Log4J sending JMS message conflicts with out program's sending debug message?
7. But why when we sending "INFO" it is okay?
It sounds to me like the appender is deadlocking
because the appender uses jbossmq which uses log4j.
Try taking a threaddump.
You can set the category
org.jboss.mq to FATAL or NONE to avoid this problem.
Regards,
Adrian