Hello,

I have the following problem : A connection(embedded broker, vm transport)
is created and then a few sessions. I poll for messages, with my own threads
in order to do throttling. One thing that confuses me is : if an exception
occurs somewhere in the transport(for example an interrupt on the consuming
thread) , the connection is closed with all the sessions and
consumers/producers.

I was able to listen for such an exceptions(with
Connection.setExceptionListener(...)) and recreate the connection. I tried
also with connectionFactory.setBrokerURL("failover:vm://localhost") which
supposed to fix problems like this one, and to reconnect, but is not working
as espected.

I have Active MQ 4.0.2.

ActiveMQConnections fragments : 

protected void transportFailed(IOException error){
        transportFailed.set(true);
        if (firstFailureError == null) {
            firstFailureError = error;
        }
        if (!closed.get() && !closing.get()) {
            try{
                cleanup(); close all sessions
            }catch(JMSException e){
               log.warn("Cleanup failed",e);
            }
        }
    }

 public void onException(final IOException error) {
        onAsyncException(error);
        asyncConnectionThread.execute(new Runnable(){
            public void run() {
                transportFailed(error);
                ServiceSupport.dispose(ActiveMQConnection.this.transport);
                brokerInfoReceived.countDown();
        
                for (Iterator iter = transportListeners.iterator();
iter.hasNext();) {
                    TransportListener listener = (TransportListener)
iter.next();
                    listener.onException(error);
                }
            }
        });
    }

Thanks.
-- 
View this message in context: 
http://www.nabble.com/Transport-Exceptions-close-the-connection-tf3791363s2354.html#a10722140
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Reply via email to