Al the code resides in on JVM - we will change this in the future, we
will have a standalone process for an ActiveMQ browser so we will use
TCP/IP connection latter.
Well, I don't know about fatal errors in the transport, but the
connection is not closed(as you can see in my last posts) the connection
is cleaned up(close sessions, stream ,listeners) but the session remains
connected.
The only thing that occurs just before I get "Session close" is this
exception :
I think I will do like that :
I will store one session in a ThreadLocal and use that to create
consumers and producers. Both operations will catch the first exception
and recreate the session again so only the second failure is propagated
up. So in this case a connection cleanup will not be a problem.
Also I will active activemq loging with debuging and everything I will
get I will post it here.
Thanks again.
2006-07-15 03:24:54,628 [AcitveMQ Connection Worker: vm://localhost#0]
ERROR com.daxtechnologies.sams.manager.SamsManagerJMS - JMS Error
javax.jms.JMSException: Interrupted.
at
org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:45)
at
org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1462)
at
org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:1478)
at
org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:94)
at
org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:120)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:94)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
at
org.apache.activemq.transport.ResponseCorrelator.oneway(ResponseCorrelator.java:60)
at
org.apache.activemq.broker.TransportConnection.dispatch(TransportConnection.java:211)
at
org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:64)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:97)
at
org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:63)
at
org.apache.activemq.transport.vm.VMTransport.oneway(VMTransport.java:76)
at
org.apache.activemq.transport.MutexTransport.oneway(MutexTransport.java:44)
at
org.apache.activemq.transport.ResponseCorrelator.asyncRequest(ResponseCorrelator.java:68)
at
org.apache.activemq.transport.ResponseCorrelator.request(ResponseCorrelator.java:73)
at
org.apache.activemq.ActiveMQConnection.syncSendPacket(ActiveMQConnection.java:1131)
at
org.apache.activemq.ActiveMQSession.syncSendPacket(ActiveMQSession.java:1667)
at
org.apache.activemq.ActiveMQMessageConsumer.<init>(ActiveMQMessageConsumer.java:196)
at
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:840)
at
org.apache.activemq.ActiveMQSession.createConsumer(ActiveMQSession.java:800)
at
com.daxtechnologies.sams.manager.JmsSessionWrapper.createConsumer(JmsSessionWrapper.java:106)
at
com.daxtechnologies.sams.manager.AbstractSamsManagerQueue.consume(AbstractSamsManagerQueue.java:133)
at
com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.consume(SamsManagerQueues.java:602)
at
com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.throttleQueue(SamsManagerQueues.java:571)
at
com.daxtechnologies.sams.manager.SamsManagerQueues$AbstractQueueRunnable.run(SamsManagerQueues.java:622)
at
com.daxtechnologies.sams.manager.SamsManagerThreadPool$WorkerThead.run(SamsManagerThreadPool.java:188)
Caused by: java.io.InterruptedIOException: Interrupted.
at
org.apache.activemq.transport.FutureResponse.set(FutureResponse.java:56)
at
org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:89)
... 23 more
James Strachan wrote:
On 7/18/06, Adrian Tarau <[EMAIL PROTECTED]> wrote:
Hi James,
Again I use VM connector so no failure should happen.
So all your code resides in a single JVM right? There is no TCP
whatsoever?
But anyway that's not a problem with the failure, the big question is
why the connection is cleaned up when a transport error occur
What else could we do other than close the connection and throw an
exception if the transport goes bad.
and what's
the approach here, is not clear for me in case of transport failures,
the connection release the sessions and next time I will get "Session
close" when I'm trying to create a consumer.
What should I do? in case of an error first try to recreate the session?
So first try and diagnose what is causing the failure. So turn on
debug logging. Or create a local build of ActiveMQ which dumps in big
flashing letters the exact error which is causing the transport to be
closed - something is causing the session to close and its 1 single
Java class, so you should be able to add logging code in there to tell
you exactly what is causing it. Then mail us the stack trace and
interesting bit of your log.