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
             Fix For: 5.6.0


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