2 connections and InterruptedException

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

2 connections and InterruptedException

Eric-AWL
Hi

With ActiveMQ 5.2.

I have one process that is connected to one embedded broker and simultaneously to an other distant broker (TCP)

When the link with the TCP distant broker is broken, I want to close properly all my Consumer ressources even for my embedded broker

I receive an InterruptedException on the "close" of a consumer associated with this embbeded broker.

Here are the java trace log

2009/10/29;11:08:57:167;ERR;CService;ADM(tqerdp31v);NOCP2@@@ADM_STA[[[######]]];NA;BUSACT-0000;(Exception)
javax.jms.JMSException: java.io.IOException
        at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:62)
        at org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1216)
        at org.apache.activemq.ActiveMQConnection.asyncSendPacket(ActiveMQConnection.java:1208)
        at org.apache.activemq.ActiveMQSession.asyncSendPacket(ActiveMQSession.java:1762)
        at org.apache.activemq.ActiveMQMessageConsumer.close(ActiveMQMessageConsumer.java:594)
        at atosbus.transport.jms.CJMSListenerChannel$CJMSObjects.close(CJMSListenerChannel.java:177)
        at atosbus.transport.jms.CJMSListenerChannel.close(CJMSListenerChannel.java:419)
        at atosbus.transport.jms.CJMSListenerChannel.close(CJMSListenerChannel.java:439)
        at atosbus.transport.jms.CJMSListenerChannel.stopListener(CJMSListenerChannel.java:339)
        at atosbus.core.service.CListenerContext.stopListener(CListenerContext.java:352)
        at atosbus.core.service.CListenerContext.removeInternalsListeningRight(CListenerContext.java:804)
        at atosbus.core.service.CService.removeInternalsListeningRight(CService.java:2087)
        at atosbus.core.system.CComponent.disallowsTransportListening(CComponent.java:2603)
        at atosbus.core.system.CInstance.removeInternalsListeningRight(CInstance.java:638)
        at atosbus.core.system.CComponent.signalRecoveringState(CComponent.java:223)
        at atosbus.transport.CNetworkConnections.brokenNetworkCbk(CNetworkConnections.java:194)
        at atosbus.transport.jms.CJMSConnection.onException(CJMSConnection.java:117)
        at org.apache.activemq.ActiveMQConnection$4.run(ActiveMQConnection.java:1779)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:650)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:675)
        at java.lang.Thread.run(Thread.java:595)
Caused by: java.io.IOException
        at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:45)
        at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:103)
        at org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:40)
        at org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
        at org.apache.activemq.ActiveMQConnection.doAsyncSendPacket(ActiveMQConnection.java:1214)
        ... 19 more
Caused by: java.lang.InterruptedException
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1097)
        at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:307)
        at java.util.concurrent.LinkedBlockingQueue.put(LinkedBlockingQueue.java:240)
        at org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:92)
        ... 22 more

My "close" on a good active consumer is done into the "onException" callback called when the falling connection is broken. I think this broken connection thread is interrupted by an other ActiveMQ mechanism when ActiveMQ declares that this connection is dead.

Can you tell me if I'm right ?

Eric-AWL