activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Torsten Mielke (Created) (JIRA)" <j...@apache.org>
Subject [jira] [Created] (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")
Date Fri, 02 Mar 2012 08:55:58 GMT
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

        

Mime
View raw message