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

Torsten Mielke updated AMQ-3752:
--------------------------------

    Attachment: AMQ-3752.patch

Attaching proposed patch including JUnit test.
                
> Repeated call to PooledConnection.setClientID() with the same clientId should 
> not raise a IllegalStateException("Setting clientID on a used Connection is 
> not allowed")
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: AMQ-3752
>                 URL: https://issues.apache.org/jira/browse/AMQ-3752
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.5.1
>            Reporter: Torsten Mielke
>            Assignee: Torsten Mielke
>              Labels: PooledConnectionFactory
>             Fix For: 5.6.0
>
>         Attachments: AMQ-3752.patch
>
>
> Calling ActiveMQConnection.setClientID() twice currently raises an 
> IllegalStateException:
> {code:title=ActiveMQConnection.java}
> public void setClientID(String newClientID) throws JMSException {
>         checkClosedOrFailed();
>         if (this.isConnectionInfoSentToBroker) {
>             throw new IllegalStateException("Setting clientID on a used 
> Connection is not allowed");
>         }
>         
>         this.info.setClientId(newClientID);
>         this.userSpecifiedClientID = true;
>         ensureConnectionInfoSent();
>     }
> {code}
> This successfully prevents from overriding clientID on an already started 
> connection.
> However in the case of using a Camel JMS endpoint with durable subscriptions, 
> transactions and configuring for a PooledConnectionFactory, this current 
> behavior causes problems. 
> Due to the durable sub a clientID needs to be set on the connection. This 
> happens at startup of the JMS consumer by calling 
> ActiveMQConnection.setClientID().
> If you stop the Camel route, the connection will be released back to the pool 
> with the clientID remaining. 
> If you restart the Camel route, it will setup a new Spring DMLC and 
> reinitialize the connection with the configured clientId. A new connection is 
> obtained from the pool and setClientID() is invoked on that connection. This 
> will raise the above Exception. 
> If we try to set the same clientID on the PooledConnection again, we should 
> simply ignore the call rather than raising an exception.This allows the 
> camel-jms consumer to be restarted. 
> Without a fix, its impossible restart a Camel route that uses camel-jms with 
> durable subscriptions and the PooledConnectionFactory.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to