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