mirror of https://github.com/apache/activemq.git
AMQ-3752: repeated call to PooledConnection.setClientID() with the same client id are ignored and don't raise an exception.
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1296094 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
e2325f5d4f
commit
3a84de9199
|
@ -118,8 +118,15 @@ public class PooledConnection implements TopicConnection, QueueConnection, Enhan
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setClientID(String clientID) throws JMSException {
|
public void setClientID(String clientID) throws JMSException {
|
||||||
|
|
||||||
|
// ignore repeated calls to setClientID() with the same client id
|
||||||
|
// this could happen when a JMS component such as Spring that uses a
|
||||||
|
// PooledConnectionFactory shuts down and reinitializes.
|
||||||
|
//
|
||||||
|
if (this.getConnection().getClientID() == null || !this.getClientID().equals(clientID)) {
|
||||||
getConnection().setClientID(clientID);
|
getConnection().setClientID(clientID);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public ConnectionConsumer createConnectionConsumer(Queue queue, String selector,
|
public ConnectionConsumer createConnectionConsumer(Queue queue, String selector,
|
||||||
ServerSessionPool serverSessionPool, int maxMessages)
|
ServerSessionPool serverSessionPool, int maxMessages)
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
package org.apache.activemq.pool;
|
||||||
|
|
||||||
|
import javax.jms.Connection;
|
||||||
|
import javax.jms.ConnectionFactory;
|
||||||
|
import javax.jms.IllegalStateException;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A couple of tests against the PooledConnection class.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PooledConnectionTest extends TestCase {
|
||||||
|
|
||||||
|
private Logger log = LoggerFactory.getLogger(PooledConnectionTest.class);
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
log.debug("setUp() called.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void tearDown() throws Exception {
|
||||||
|
log.debug("tearDown() called.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* AMQ-3752:
|
||||||
|
* Tests how the ActiveMQConnection reacts to repeated calls to
|
||||||
|
* setClientID().
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
public void testRepeatedSetClientIDCalls() throws Exception {
|
||||||
|
log.debug("running testRepeatedSetClientIDCalls()");
|
||||||
|
|
||||||
|
// 1st test: call setClientID("newID") twice
|
||||||
|
// this should be tolerated and not result in an exception
|
||||||
|
//
|
||||||
|
ConnectionFactory cf = createPooledConnectionFactory();
|
||||||
|
Connection conn = cf.createConnection();
|
||||||
|
conn.setClientID("newID");
|
||||||
|
|
||||||
|
try {
|
||||||
|
conn.setClientID("newID");
|
||||||
|
conn.start();
|
||||||
|
conn.close();
|
||||||
|
cf = null;
|
||||||
|
} catch (IllegalStateException ise) {
|
||||||
|
log.error("Repeated calls to ActiveMQConnection.setClientID(\"newID\") caused " + ise.getMessage());
|
||||||
|
Assert.fail("Repeated calls to ActiveMQConnection.setClientID(\"newID\") caused " + ise.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2nd test: call setClientID() twice with different IDs
|
||||||
|
// this should result in an IllegalStateException
|
||||||
|
//
|
||||||
|
cf = createPooledConnectionFactory();
|
||||||
|
conn = cf.createConnection();
|
||||||
|
conn.setClientID("newID1");
|
||||||
|
try {
|
||||||
|
conn.setClientID("newID2");
|
||||||
|
Assert.fail("calling ActiveMQConnection.setClientID() twice with different clientID must raise an IllegalStateException");
|
||||||
|
} catch (IllegalStateException ise) {
|
||||||
|
log.debug("Correctly received " + ise);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3rd test: try to call setClientID() after start()
|
||||||
|
// should result in an exception
|
||||||
|
cf = createPooledConnectionFactory();
|
||||||
|
conn = cf.createConnection();
|
||||||
|
try {
|
||||||
|
conn.start();
|
||||||
|
conn.setClientID("newID3");
|
||||||
|
Assert.fail("Calling setClientID() after start() mut raise a JMSException.");
|
||||||
|
} catch (IllegalStateException ise) {
|
||||||
|
log.debug("Correctly received " + ise);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.debug("Test finished.");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected ConnectionFactory createPooledConnectionFactory() {
|
||||||
|
ConnectionFactory cf = new PooledConnectionFactory("vm://localhost?broker.persistent=false");
|
||||||
|
((PooledConnectionFactory)cf).setMaxConnections(1);
|
||||||
|
log.debug("ConnectionFactory initialized.");
|
||||||
|
return cf;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue