Unfortunately, all my problems are not resolved ... I tried with two equivalent processes on two different servers (and the third which is abruptly closed). One terminated gracefully, the other had always 2 active threads
"ActiveMQ Session: ID:td0sib01s.priv.atos.fr-46825-1246630520929-0:2:3" prio=10 tid=0x000000000a52d000 nid=0x6618 in Object.wait() [0x00000000468bf000..0x00000000468bfc10]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00002aaab3e73ae8> (a java.lang.Object)
at java.lang.Object.wait(Object.java:502)
at org.apache.activemq.thread.DedicatedTaskRunner.runTask(DedicatedTaskRunner.java:105)
- locked <0x00002aaab3e73ae8> (a java.lang.Object)
at org.apache.activemq.thread.DedicatedTaskRunner$1.run(DedicatedTaskRunner.java:36)
"Multicast Discovery Agent Notifier" daemon prio=10 tid=0x000000000a82dc00 nid=0x6586 waiting on condition [0x0000000043188000..0x0000000043188b90]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00002aaab3cf20a8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1978)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:386)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1043)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1103)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:636)
..... :-(
Eric-AWL wrote:
NEW
If I force a brokenConnection.close() into the onException callback, (called when the "other" connection is broken), my process can now terminate gracefully and is not blocked waiting threads die.
However there is a JMSException thrown by this "close" on a brokenConnection. But it is not a big problem.
I think it is not the way ActiveMQ should work.
Eric-AWL