You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Torsten Mielke (Commented) (JIRA)" <ji...@apache.org> on 2012/03/02 10:04:00 UTC

[jira] [Commented] (AMQ-3752) Repeated call to PooledConnection.setClientID() with the same clientId should not raise a IllegalStateException("Setting clientID on a used Connection is not allowed")

    [ https://issues.apache.org/jira/browse/AMQ-3752?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13220786#comment-13220786 ] 

Torsten Mielke commented on AMQ-3752:
-------------------------------------

Fixed in revision #1296094.
                
> 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