You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Phillip Bayliss (JIRA)" <ji...@apache.org> on 2010/03/03 01:53:44 UTC

[jira] Created: (AMQ-2635) Add setClientInternalExceptionListener to ActiveMQConnectionFactory

Add setClientInternalExceptionListener to ActiveMQConnectionFactory
-------------------------------------------------------------------

                 Key: AMQ-2635
                 URL: https://issues.apache.org/activemq/browse/AMQ-2635
             Project: ActiveMQ
          Issue Type: Improvement
          Components: JMS client
    Affects Versions: 5.2.0
            Reporter: Phillip Bayliss
            Priority: Minor



We have registered a durable topic consumer using  org.springframework.jms.listener.DefaultMessageListenerContainer.  When the server is shut down or becomes unavailable we would like the consumer to be notified in some way.  

Currently there is an exception logged in activemq on level debug but the consumer is not aware that the server is no longer available.  Is it possible to propogate this exception back through spring or register somehwere in activeMQ to capture this 'server unavailable' event?

Client is linux activemq 5.2, spring 2.5.  Server is linux activemq 5.3

Here is the client log when the server is stopped.

2010-03-02 17:07:31,063 [taskExecutor-1] DEBUG 2010-03-02 17:07:32,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
2010-03-02 17:07:32,704 [ActiveMQ Transport: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.ActiveMQConnection - Async exception with no exception listener: java.io.EOFException
java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269)
        at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:210)
        at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:202)
        at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
        at java.lang.Thread.run(Thread.java:619)
2010-03-02 17:07:32,706 [ActiveMQ Connection Worker: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.transport.tcp.TcpTransport - Stopping transport tcp://localhost/127.0.0.1:61616
2010-03-02 17:07:33,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
etc. . .

Spring durable topic registration
<jms:listener-container connection-factory="jmsFactory"
                                                        task-executor="taskExecutor"
                                                        acknowledge="transacted"
                                                        destination-type="durableTopic"
                                                        client-id="DLT">
                <jms:listener destination="logTopic" ref="listener" subscription="durableLogTopic" />
</jms:listener-container> 
------
Don't think there is an easy way. You need to set a
ClientInternalExceptionListener on the underlying activemq connection, but
there is no easy way to set that via spring as there is no access to the
connection.

One option would be to provide your own connection factory that can wrap and
delegate to the acivemq connectionfactory and set a
clientInternalExceptionListener on each returned connection.
>From the implementation of the listener you can do what ever you need.

Shared instances of transport and exception listeners are already exposed on
the connection factory, I think it would make sense to also add a shared
clientInternalExceptionListener option also.

Could you open a jira issue to track this? 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Assigned: (AMQ-2635) Add setClientInternalExceptionListener to ActiveMQConnectionFactory

Posted by "Gary Tully (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully reassigned AMQ-2635:
-------------------------------

    Assignee: Gary Tully

> Add setClientInternalExceptionListener to ActiveMQConnectionFactory
> -------------------------------------------------------------------
>
>                 Key: AMQ-2635
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2635
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: JMS client
>    Affects Versions: 5.2.0
>            Reporter: Phillip Bayliss
>            Assignee: Gary Tully
>            Priority: Minor
>
> We have registered a durable topic consumer using  org.springframework.jms.listener.DefaultMessageListenerContainer.  When the server is shut down or becomes unavailable we would like the consumer to be notified in some way.  
> Currently there is an exception logged in activemq on level debug but the consumer is not aware that the server is no longer available.  Is it possible to propogate this exception back through spring or register somehwere in activeMQ to capture this 'server unavailable' event?
> Client is linux activemq 5.2, spring 2.5.  Server is linux activemq 5.3
> Here is the client log when the server is stopped.
> 2010-03-02 17:07:31,063 [taskExecutor-1] DEBUG 2010-03-02 17:07:32,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
> 2010-03-02 17:07:32,704 [ActiveMQ Transport: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.ActiveMQConnection - Async exception with no exception listener: java.io.EOFException
> java.io.EOFException
>         at java.io.DataInputStream.readInt(DataInputStream.java:375)
>         at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269)
>         at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:210)
>         at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:202)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
>         at java.lang.Thread.run(Thread.java:619)
> 2010-03-02 17:07:32,706 [ActiveMQ Connection Worker: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.transport.tcp.TcpTransport - Stopping transport tcp://localhost/127.0.0.1:61616
> 2010-03-02 17:07:33,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
> etc. . .
> Spring durable topic registration
> <jms:listener-container connection-factory="jmsFactory"
>                                                         task-executor="taskExecutor"
>                                                         acknowledge="transacted"
>                                                         destination-type="durableTopic"
>                                                         client-id="DLT">
>                 <jms:listener destination="logTopic" ref="listener" subscription="durableLogTopic" />
> </jms:listener-container> 
> ------
> Don't think there is an easy way. You need to set a
> ClientInternalExceptionListener on the underlying activemq connection, but
> there is no easy way to set that via spring as there is no access to the
> connection.
> One option would be to provide your own connection factory that can wrap and
> delegate to the acivemq connectionfactory and set a
> clientInternalExceptionListener on each returned connection.
> From the implementation of the listener you can do what ever you need.
> Shared instances of transport and exception listeners are already exposed on
> the connection factory, I think it would make sense to also add a shared
> clientInternalExceptionListener option also.
> Could you open a jira issue to track this? 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (AMQ-2635) Add setClientInternalExceptionListener to ActiveMQConnectionFactory

Posted by "Gary Tully (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/activemq/browse/AMQ-2635?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Gary Tully resolved AMQ-2635.
-----------------------------

       Resolution: Fixed
    Fix Version/s: 5.4.0
                   5.3.1

enhancement committed to svn in r918384 and onto the 5.3.1 branch

> Add setClientInternalExceptionListener to ActiveMQConnectionFactory
> -------------------------------------------------------------------
>
>                 Key: AMQ-2635
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2635
>             Project: ActiveMQ
>          Issue Type: Improvement
>          Components: JMS client
>    Affects Versions: 5.2.0
>            Reporter: Phillip Bayliss
>            Assignee: Gary Tully
>            Priority: Minor
>             Fix For: 5.3.1, 5.4.0
>
>
> We have registered a durable topic consumer using  org.springframework.jms.listener.DefaultMessageListenerContainer.  When the server is shut down or becomes unavailable we would like the consumer to be notified in some way.  
> Currently there is an exception logged in activemq on level debug but the consumer is not aware that the server is no longer available.  Is it possible to propogate this exception back through spring or register somehwere in activeMQ to capture this 'server unavailable' event?
> Client is linux activemq 5.2, spring 2.5.  Server is linux activemq 5.3
> Here is the client log when the server is stopped.
> 2010-03-02 17:07:31,063 [taskExecutor-1] DEBUG 2010-03-02 17:07:32,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
> 2010-03-02 17:07:32,704 [ActiveMQ Transport: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.ActiveMQConnection - Async exception with no exception listener: java.io.EOFException
> java.io.EOFException
>         at java.io.DataInputStream.readInt(DataInputStream.java:375)
>         at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:269)
>         at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:210)
>         at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:202)
>         at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
>         at java.lang.Thread.run(Thread.java:619)
> 2010-03-02 17:07:32,706 [ActiveMQ Connection Worker: tcp://localhost/127.0.0.1:61616] DEBUG org.apache.activemq.transport.tcp.TcpTransport - Stopping transport tcp://localhost/127.0.0.1:61616
> 2010-03-02 17:07:33,063 [taskExecutor-1] DEBUG org.springframework.jms.listener.DefaultMessageListenerContainer - Consumer [ActiveMQMessageConsumer { value=ID:lab-1-33000-1267511832426-0:2:1:1, started=true }] of session [PooledSession { ActiveMQSession {id=ID:lab-1-33000-1267511832426-0:2:1,started=true} }] did not receive a message
> etc. . .
> Spring durable topic registration
> <jms:listener-container connection-factory="jmsFactory"
>                                                         task-executor="taskExecutor"
>                                                         acknowledge="transacted"
>                                                         destination-type="durableTopic"
>                                                         client-id="DLT">
>                 <jms:listener destination="logTopic" ref="listener" subscription="durableLogTopic" />
> </jms:listener-container> 
> ------
> Don't think there is an easy way. You need to set a
> ClientInternalExceptionListener on the underlying activemq connection, but
> there is no easy way to set that via spring as there is no access to the
> connection.
> One option would be to provide your own connection factory that can wrap and
> delegate to the acivemq connectionfactory and set a
> clientInternalExceptionListener on each returned connection.
> From the implementation of the listener you can do what ever you need.
> Shared instances of transport and exception listeners are already exposed on
> the connection factory, I think it would make sense to also add a shared
> clientInternalExceptionListener option also.
> Could you open a jira issue to track this? 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.