[ 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