activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hal Henderson (JIRA)" <j...@apache.org>
Subject [jira] Updated: (AMQCPP-323) The OnException method of registered Exception listener is not called when broker is stopped.
Date Thu, 21 Oct 2010 15:23:41 GMT

     [ https://issues.apache.org/activemq/browse/AMQCPP-323?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Hal Henderson updated AMQCPP-323:
---------------------------------


This issue may be related to  AMQCPP-316  Unable to receive any messages after re-starting
message broker.

It appeared that this bug was introduced in version 3.2.0.

> The OnException method of registered Exception listener is not called when broker is
stopped.
> ---------------------------------------------------------------------------------------------
>
>                 Key: AMQCPP-323
>                 URL: https://issues.apache.org/activemq/browse/AMQCPP-323
>             Project: ActiveMQ C++ Client
>          Issue Type: Bug
>    Affects Versions: 3.2.0, 3.2.1, 3.2.2, 3.2.3
>         Environment: Windows
>            Reporter: Hal Henderson
>            Assignee: Timothy Bish
>
> In order to reconnect when the broker is stopped, our application registers an exception
listener by calling ActiveMQConnection::setExceptionListener.  Previously, we used activemq-cpp
3.0.1 which would call our applications onException method whenever the broker was stopped.
 Our onException method cleans up the connection and attempts create a new connection until
it is successful.  This worked fine with activemq-cpp 3.0.1.
> We recently changed our application to use activemq-cpp 3.2.2.  We found that with this
version of activemq-cpp (and no changes to our application) our onException method is not
called when the broker is stopped.  The result is that our application can not send or receive
any message without restarting the application.
> We debugged the problem and found that in the class ConnectionConfig (ActiveMQConnection.cpp)
there are two cms::ExceptionListener instance variables: defaultListener and exceptionListener.
The method ActiveMQConnection::setExceptionListener sets defaultListener to the input listener
object.  However, the method ActiveMQConnection::fire calls the onException method of exceptionListener
(if it is not NULL).   As far as I could see there is no way for exceptionListener to be set
to anything but NULL.
> The fix proposed fix is to remove defaultListener and to replace all uses of  defaultListener
with exceptionListener.  After making the proposed change, the OnException method is getting
called as expected.
> The diff of ActiveMQConnection.cpp are as follows:
> ActiveMQConnection.cpp
> @@ -109,7 +109,6 @@
>          unsigned int closeTimeout;
>          unsigned int producerWindowSize;
>  
> -        cms::ExceptionListener* defaultListener;
>          std::auto_ptr<PrefetchPolicy> defaultPrefetchPolicy;
>          std::auto_ptr<RedeliveryPolicy> defaultRedeliveryPolicy;
>  
> @@ -130,7 +129,6 @@
>                               sendTimeout( 0 ),
>                               closeTimeout( 15000 ),
>                               producerWindowSize( 0 ),
> -                             defaultListener( NULL ),
>                               defaultPrefetchPolicy( NULL ),
>                               defaultRedeliveryPolicy( NULL ),
>                               exceptionListener( NULL ) {
> @@ -965,12 +963,12 @@
>  
>  ////////////////////////////////////////////////////////////////////////////////
>  void ActiveMQConnection::setExceptionListener( cms::ExceptionListener* listener ) {
> -    this->config->defaultListener = listener;
> +    this->config->exceptionListener = listener;
>  }
>  
>  ////////////////////////////////////////////////////////////////////////////////
>  cms::ExceptionListener* ActiveMQConnection::getExceptionListener() const {
> -    return this->config->defaultListener;
> +      return this->config->exceptionListener;
>  }
>  
>  ////////////////////////////////////////////////////////////////////////////////

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


Mime
View raw message