I sometime have deadlocks while running junit tests that involve ActiveMQ. Following is a stack trace i dumped. As you can see, the two last threads are deadlocked because of the MutexTransport. This cause the first thread (main thread) to hang forever.
Thread [main] (Suspended) MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=292) ResponseCorrelator.oneway(Command) line: 58 ManagedTransportConnection(TransportConnection).dispatch(Command) line: 211 ManagedTransportConnection(AbstractConnection).processDispatch(Command) line: 628 ManagedTransportConnection(AbstractConnection).dispatchSync(Command) line: 605 TopicSubscription.dispatch(MessageReference) line: 315 TopicSubscription.add(MessageReference) line: 74 SimpleDispatchPolicy.dispatch(ConnectionContext, MessageReference, MessageEvaluationContext, List) line: 50 Topic.dispatch(ConnectionContext, Message) line: 443 Topic.send(ConnectionContext, Message) line: 254 ManagedTopicRegion(AbstractRegion).send(ConnectionContext, Message) line: 225 ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message) line: 345 TransactionBroker.send(ConnectionContext, Message) line: 192 AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message) line: 113 CompositeDestinationBroker.send(ConnectionContext, Message) line: 97 BrokerService$2(MutableBrokerFilter).send(ConnectionContext, Message) line: 126 ManagedTransportConnection(AbstractConnection).processMessage(Message) line: 377 ActiveMQObjectMessage(ActiveMQMessage).visit(CommandVisitor) line: 590 ManagedTransportConnection(AbstractConnection).service(Command) line: 226 TransportConnection$1.onCommand(Command) line: 62 ResponseCorrelator.onCommand(Command) line: 91 MutexTransport(TransportFilter).onCommand(Command) line: 63 VMTransportServer$1(VMTransport).oneway(Command) line: 76 MutexTransport.oneway(Command) line: 44 => MutexTransport (id=314) ResponseCorrelator.oneway(Command) line: 58 ActiveMQConnection.asyncSendPacket(Command) line: 1092 ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination, Message, int, int, long) line: 1553 ActiveMQMessageProducer.send(Destination, Message, int, int, long) line: 462 ActiveMQMessageProducer.send(Message) line: 356 JCAFlow.sendJmsMessage(Destination, Serializable, boolean, boolean) line: 707 JCAFlow.onInternalEndpointUnregistered(EndpointEvent, boolean) line: 462 JCAFlow$1.internalEndpointUnregistered(EndpointEvent) line: 245 EndpointRegistry.fireEvent(ServiceEndpoint, int) line: 575 EndpointRegistry.unregisterInternalEndpoint(ComponentContext, InternalEndpoint) line: 199 Registry.deactivateEndpoint(ComponentContext, InternalEndpoint) line: 205 ComponentContextImpl.deactivateEndpoint(ServiceEndpoint) line: 157 ReceiverComponent(PojoSupport).shutDown() line: 103 ComponentMBeanImpl.doShutDown() line: 335 ComponentRegistry.shutDown() line: 105 Registry.shutDown() line: 142 SpringJBIContainer(JBIContainer).shutDown() line: 601 SpringJBIContainer.destroy() line: 184 DisposableBeanAdapter.destroy() line: 97 DefaultListableBeanFactory(AbstractBeanFactory).destroyBean(String, Object) line: 1159 DefaultListableBeanFactory(AbstractBeanFactory).destroyDisposableBean(String) line: 1131 DefaultListableBeanFactory(AbstractBeanFactory).destroySingletons() line: 660 ClassPathXmlApplicationContext(AbstractApplicationContext).doClose() line: 594 ClassPathXmlApplicationContext(AbstractApplicationContext).close() line: 563 ClassPathXmlApplicationContext(AbstractApplicationContext).destroy() line: 552 JmsSpringJcaTest(SpringTestSupport).tearDown() line: 66 JmsSpringJcaTest.tearDown() line: 52 JmsSpringJcaTest(TestCase).runBare() line: 130 TestResult$1.protect() line: 106 TestResult.runProtected(Test, Protectable) line: 124 TestResult.run(TestCase) line: 109 JmsSpringJcaTest(TestCase).run(TestResult) line: 118 TestSuite.runTest(Test, TestResult) line: 208 TestSuite.run(TestResult) line: 203 JUnit3TestReference.run(TestExecution) line: 128 TestExecution.run(ITestReference[]) line: 38 RemoteTestRunner.runTests(String[], String, TestExecution) line: 460 RemoteTestRunner.runTests(TestExecution) line: 673 RemoteTestRunner.run() line: 386 RemoteTestRunner.main(String[]) line: 196 Thread [ActiveMQ Session Task] (Suspended) MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=419) ResponseCorrelator.oneway(Command) line: 58 ActiveMQConnection.asyncSendPacket(Command) line: 1092 ActiveMQSession.<init>(ActiveMQConnection, SessionId, int, boolean, boolean) line: 227 ActiveMQConnection.createSession(boolean, int) line: 274 ServerSessionPoolImpl.createServerSessionImpl() line: 60 ServerSessionPoolImpl.getServerSession() line: 113 ActiveMQConnectionConsumer.dispatch(MessageDispatch) line: 135 ActiveMQConnection.onCommand(Command) line: 1403 ResponseCorrelator.onCommand(Command) line: 91 MutexTransport(TransportFilter).onCommand(Command) line: 63 VMTransport.oneway(Command) line: 76 MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=292) ResponseCorrelator.oneway(Command) line: 58 ManagedTransportConnection(TransportConnection).dispatch(Command) line: 211 ManagedTransportConnection(AbstractConnection).processDispatch(Command) line: 628 ManagedTransportConnection(AbstractConnection).dispatchSync(Command) line: 605 TopicSubscription.dispatch(MessageReference) line: 315 TopicSubscription.add(MessageReference) line: 74 SimpleDispatchPolicy.dispatch(ConnectionContext, MessageReference, MessageEvaluationContext, List) line: 50 Topic.dispatch(ConnectionContext, Message) line: 443 Topic.send(ConnectionContext, Message) line: 254 ManagedTopicRegion(AbstractRegion).send(ConnectionContext, Message) line: 225 ManagedRegionBroker(RegionBroker).send(ConnectionContext, Message) line: 345 TransactionBroker.send(ConnectionContext, Message) line: 192 AdvisoryBroker(BrokerFilter).send(ConnectionContext, Message) line: 113 CompositeDestinationBroker.send(ConnectionContext, Message) line: 97 BrokerService$2(MutableBrokerFilter).send(ConnectionContext, Message) line: 126 ManagedTransportConnection(AbstractConnection).processMessage(Message) line: 377 ActiveMQObjectMessage(ActiveMQMessage).visit(CommandVisitor) line: 590 ManagedTransportConnection(AbstractConnection).service(Command) line: 226 TransportConnection$1.onCommand(Command) line: 62 ResponseCorrelator.onCommand(Command) line: 91 MutexTransport(TransportFilter).onCommand(Command) line: 63 VMTransportServer$1(VMTransport).oneway(Command) line: 76 MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=534) ResponseCorrelator.oneway(Command) line: 58 ActiveMQConnection.asyncSendPacket(Command) line: 1092 ActiveMQSession.send(ActiveMQMessageProducer, ActiveMQDestination, Message, int, int, long) line: 1553 ActiveMQMessageProducer.send(Destination, Message, int, int, long) line: 462 ActiveMQMessageProducer.send(Message) line: 356 JCAFlow.sendJmsMessage(Destination, Serializable, boolean, boolean) line: 707 JCAFlow.onInternalEndpointRegistered(EndpointEvent, boolean) line: 445 JCAFlow.onAdvisoryMessage(Object) line: 618 JCAFlow$4.onMessage(Message) line: 336 ActiveMQMessageConsumer.dispatch(MessageDispatch) line: 795 ActiveMQSessionExecutor.dispatch(MessageDispatch) line: 96 ActiveMQSessionExecutor.iterate() line: 149 PooledTaskRunner.runTask() line: 110 PooledTaskRunner.access$100(PooledTaskRunner) line: 25 PooledTaskRunner$1.run() line: 43 ThreadPoolExecutor$Worker.runTask(Runnable) line: 650 ThreadPoolExecutor$Worker.run() line: 675 Thread.run() line: 595 Thread [Thread-87] (Suspended) MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=292) ResponseCorrelator.oneway(Command) line: 58 ManagedTransportConnection(TransportConnection).dispatch(Command) line: 211 TransportConnection$1.onCommand(Command) line: 64 ResponseCorrelator.onCommand(Command) line: 91 MutexTransport(TransportFilter).onCommand(Command) line: 63 VMTransportServer$1(VMTransport).oneway(Command) line: 76 MutexTransport.oneway(Command) line: 44 ==> MutexTransport (id=419) ResponseCorrelator.asyncRequest(Command, ResponseCallback) line: 66 ResponseCorrelator.request(Command) line: 71 ActiveMQConnection.syncSendPacket(Command) line: 1112 ActiveMQConnectionConsumer.<init>(ActiveMQConnection, ServerSessionPool, ConsumerInfo) line: 85 ActiveMQConnection.createConnectionConsumer(Destination, String, ServerSessionPool, int, boolean) line: 1022 ActiveMQEndpointWorker$1.run() line: 163 WorkerContext.run() line: 291 PooledExecutor$Worker.run() line: not available Thread.run() line: 595 -- Cheers, Guillaume Nodet