You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2015/01/14 16:34:15 UTC
[1/5] qpid-jms git commit: require an explicit clientID be set on the
Connection in order to create a DurableSubscriber,
preventing their use with auto-generated clientID
Repository: qpid-jms
Updated Branches:
refs/heads/master 6217cb29a -> b8d40c2c1
require an explicit clientID be set on the Connection in order to create a DurableSubscriber, preventing their use with auto-generated clientID
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/6d2968c6
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/6d2968c6
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/6d2968c6
Branch: refs/heads/master
Commit: 6d2968c63dc4e98263b56048a5e8fefbf961208e
Parents: 6217cb2
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Jan 14 11:06:52 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Wed Jan 14 11:06:52 2015 +0000
----------------------------------------------------------------------
.../java/org/apache/qpid/jms/JmsConnection.java | 11 +++-----
.../java/org/apache/qpid/jms/JmsSession.java | 7 +++++
.../jms/integration/IntegrationTestFixture.java | 10 ++++++--
.../jms/integration/SessionIntegrationTest.java | 27 ++++++++++++++++++++
4 files changed, 46 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/6d2968c6/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
index c71e3bc..bc98a85 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
@@ -231,13 +231,6 @@ public class JmsConnection implements Connection, TopicConnection, QueueConnecti
destroyResource(connectionInfo);
}
- synchronized (this) {
- if (clientIdSet) {
- connectionInfo.setClientId(null);
- clientIdSet = false;
- }
- }
-
tempDestinations.clear();
started.set(false);
connected.set(false);
@@ -614,6 +607,10 @@ public class JmsConnection implements Connection, TopicConnection, QueueConnecti
return new JmsTransactionId(connectionInfo.getConnectionId(), transactionIdGenerator.incrementAndGet());
}
+ protected synchronized boolean isExplicitClientID() {
+ return clientIdSet;
+ }
+
////////////////////////////////////////////////////////////////////////////
// Provider interface methods
////////////////////////////////////////////////////////////////////////////
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/6d2968c6/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
index e98f59b..92410dc 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
@@ -417,6 +417,7 @@ public class JmsSession implements Session, QueueSession, TopicSession, JmsMessa
public TopicSubscriber createDurableSubscriber(Topic topic, String name, String messageSelector, boolean noLocal) throws JMSException {
checkClosed();
checkDestination(topic);
+ checkClientIDWasSetExplicitly();
messageSelector = checkSelector(messageSelector);
JmsDestination dest = JmsMessageTransformation.transformDestination(connection, topic);
JmsTopicSubscriber result = new JmsDurableTopicSubscriber(getNextConsumerId(), this, dest, name, false, messageSelector);
@@ -424,6 +425,12 @@ public class JmsSession implements Session, QueueSession, TopicSession, JmsMessa
return result;
}
+ protected void checkClientIDWasSetExplicitly() throws IllegalStateException {
+ if (!connection.isExplicitClientID()) {
+ throw new IllegalStateException("You must specify a unique clientID for the Connection to use a DurableSubscriber");
+ }
+ }
+
/**
* @param name
* @throws JMSException
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/6d2968c6/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
index 804111c..34fd3cc 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/IntegrationTestFixture.java
@@ -49,6 +49,10 @@ public class IntegrationTestFixture {
}
Connection establishConnecton(TestAmqpPeer testPeer, String optionsString, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties) throws JMSException {
+ return establishConnecton(testPeer, null, serverCapabilities, serverProperties, true);
+ }
+
+ Connection establishConnecton(TestAmqpPeer testPeer, String optionsString, Symbol[] serverCapabilities, Map<Symbol, Object> serverProperties, boolean setClientId) throws JMSException {
testPeer.expectPlainConnect("guest", "guest", serverCapabilities, serverProperties);
// Each connection creates a session for managing temporary destinations etc
@@ -63,8 +67,10 @@ public class IntegrationTestFixture {
ConnectionFactory factory = new JmsConnectionFactory(brokerURI);
Connection connection = factory.createConnection("guest", "guest");
- // Set a clientId to provoke the actual AMQP connection process to occur.
- connection.setClientID("clientName");
+ if(setClientId) {
+ // Set a clientId to provoke the actual AMQP connection process to occur.
+ connection.setClientID("clientName");
+ }
assertNull(testPeer.getThrowable());
return connection;
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/6d2968c6/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
index 057465f..2610b97 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SessionIntegrationTest.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import javax.jms.Connection;
import javax.jms.Destination;
+import javax.jms.IllegalStateException;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
@@ -455,6 +456,32 @@ public class SessionIntegrationTest extends QpidJmsTestCase {
}
@Test(timeout = 5000)
+ public void testCreateDurableTopicSubscriberFailsIfConnectionDoesntHaveExplicitClientID() throws Exception {
+ try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+ // Create a connection without an explicit clientId
+ Connection connection = testFixture.establishConnecton(testPeer, null, null, null, false);
+ connection.start();
+
+ testPeer.expectBegin(true);
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ String topicName = "myTopic";
+ Topic dest = session.createTopic(topicName);
+ String subscriptionName = "mySubscription";
+
+ try {
+ // Verify this fails, a clientID is required and only one chosen by the application makes sense
+ session.createDurableSubscriber(dest, subscriptionName);
+ fail("expected exception to be thrown due to lack of explicit clientID");
+ } catch(IllegalStateException ise) {
+ // Expected
+ }
+
+ testPeer.waitForAllHandlersToComplete(1000);
+ }
+ }
+
+ @Test(timeout = 5000)
public void testCloseDurableTopicSubscriberDetachesWithCloseFalse() throws Exception {
try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
Connection connection = testFixture.establishConnecton(testPeer);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[4/5] qpid-jms git commit: allow configuring the clientID via the
ConnectionFactory using brokerURI or JNDI properties
Posted by ro...@apache.org.
allow configuring the clientID via the ConnectionFactory using brokerURI or JNDI properties
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/c15320bc
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/c15320bc
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/c15320bc
Branch: refs/heads/master
Commit: c15320bca153accc733cdbaf4b45e36a9217240e
Parents: 617df63
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Jan 14 15:05:30 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Wed Jan 14 15:05:30 2015 +0000
----------------------------------------------------------------------
.../apache/qpid/jms/JmsConnectionFactory.java | 35 +++++++++++++++++++-
1 file changed, 34 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/c15320bc/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
index 6a7dcf8..1ec9213 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
@@ -49,11 +49,13 @@ import org.slf4j.LoggerFactory;
public class JmsConnectionFactory extends JNDIStorable implements ConnectionFactory, QueueConnectionFactory, TopicConnectionFactory {
private static final Logger LOG = LoggerFactory.getLogger(JmsConnectionFactory.class);
+ private static final String CLIENT_ID_PROP = "clientID";
private URI brokerURI;
private URI localURI;
private String username;
private String password;
+ private String clientID;
private boolean forceAsyncSend;
private boolean alwaysSyncSend;
private boolean sendAcksAsync;
@@ -232,11 +234,25 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
protected <T extends JmsConnection> T configureConnection(T connection, String username, String password) throws JMSException {
try {
- PropertyUtil.setProperties(connection, PropertyUtil.getProperties(this));
+
+ Map<String, String> properties = PropertyUtil.getProperties(this);
+ // We must ensure that we apply the clientID last, since setting it on
+ // the Connection object provokes establishing the underlying connection.
+ boolean setClientID = false;
+ if(properties.containsKey(CLIENT_ID_PROP)) {
+ setClientID = true;
+ properties.remove(CLIENT_ID_PROP);
+ }
+
+ PropertyUtil.setProperties(connection, properties);
connection.setExceptionListener(exceptionListener);
connection.setUsername(username);
connection.setPassword(password);
connection.setBrokerURI(brokerURI);
+ if(setClientID){
+ connection.setClientID(clientID);
+ }
+
return connection;
} catch (Exception e) {
throw JmsExceptionSupport.create(e);
@@ -542,6 +558,23 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
this.clientIdGenerator = clientIdGenerator;
}
+ public String getClientID() {
+ return clientID;
+ }
+
+ /**
+ * Sets the JMS clientID to use for connections created by this factory.
+ *
+ * NOTE: A clientID can only be used by one Connection at a time, so setting it here
+ * will restrict the ConnectionFactory to creating a single open Connection at a time.
+ * It is possible to set the clientID on the Connection itself immediately after
+ * creation if no value has been set via the factory that created it, which will
+ * allow the factory to create multiple open connections at a time.
+ */
+ public void setClientID(String clientID) {
+ this.clientID = clientID;
+ }
+
/**
* Sets the prefix used by connection id generator.
*
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[5/5] qpid-jms git commit: ensure the noLocal flag is passed through
to durable subscriber
Posted by ro...@apache.org.
ensure the noLocal flag is passed through to durable subscriber
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/b8d40c2c
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/b8d40c2c
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/b8d40c2c
Branch: refs/heads/master
Commit: b8d40c2c15f1dea09d29717befc0e43ce9266413
Parents: c15320b
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Jan 14 15:06:11 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Wed Jan 14 15:06:11 2015 +0000
----------------------------------------------------------------------
qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/b8d40c2c/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
index 92410dc..f724f06 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
@@ -420,7 +420,7 @@ public class JmsSession implements Session, QueueSession, TopicSession, JmsMessa
checkClientIDWasSetExplicitly();
messageSelector = checkSelector(messageSelector);
JmsDestination dest = JmsMessageTransformation.transformDestination(connection, topic);
- JmsTopicSubscriber result = new JmsDurableTopicSubscriber(getNextConsumerId(), this, dest, name, false, messageSelector);
+ JmsTopicSubscriber result = new JmsDurableTopicSubscriber(getNextConsumerId(), this, dest, name, noLocal, messageSelector);
result.init();
return result;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[3/5] qpid-jms git commit: set a properties key prefix for the
connection factory JNDI properties,
simplify context factory implementation slightly
Posted by ro...@apache.org.
set a properties key prefix for the connection factory JNDI properties, simplify context factory implementation slightly
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/617df635
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/617df635
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/617df635
Branch: refs/heads/master
Commit: 617df635efcfea1b65a58b87412e29964a8d8d39
Parents: d2b7e6d
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Jan 14 11:36:27 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Wed Jan 14 11:36:27 2015 +0000
----------------------------------------------------------------------
.../qpid/jms/jndi/JmsInitialContextFactory.java | 21 ++++----------------
1 file changed, 4 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/617df635/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
index 5d30e0e..10583b5 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/jndi/JmsInitialContextFactory.java
@@ -50,17 +50,12 @@ public class JmsInitialContextFactory implements InitialContextFactory {
private static final String[] DEFAULT_CONNECTION_FACTORY_NAMES = {
"ConnectionFactory", "QueueConnectionFactory", "TopicConnectionFactory" };
- private String connectionPrefix = "";
-
- String queuePrefix = "queue.";
- String topicPrefix = "topic.";
+ private String connectionFactoryPrefix = "connectionfactory.";
+ private String queuePrefix = "queue.";
+ private String topicPrefix = "topic.";
@Override
public Context getInitialContext(Hashtable environment) throws NamingException {
-
- queuePrefix = getValue(environment, "queuePrefix", queuePrefix);
- topicPrefix = getValue(environment, "topicPrefix", topicPrefix);
-
// lets create a factory
Map<String, Object> data = new ConcurrentHashMap<String, Object>();
String[] names = getConnectionFactoryNames(environment);
@@ -120,7 +115,7 @@ public class JmsInitialContextFactory implements InitialContextFactory {
protected JmsConnectionFactory createConnectionFactory(String name, Hashtable environment) throws URISyntaxException {
Hashtable temp = new Hashtable(environment);
- String prefix = connectionPrefix + name + ".";
+ String prefix = connectionFactoryPrefix + name + ".";
for (Iterator iter = environment.entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
@@ -211,12 +206,4 @@ public class JmsInitialContextFactory implements InitialContextFactory {
answer.setProperties(properties);
return answer;
}
-
- public String getConnectionPrefix() {
- return connectionPrefix;
- }
-
- public void setConnectionPrefix(String connectionPrefix) {
- this.connectionPrefix = connectionPrefix;
- }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/5] qpid-jms git commit: add some notes for possible cleanup
Posted by ro...@apache.org.
add some notes for possible cleanup
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/d2b7e6d7
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/d2b7e6d7
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/d2b7e6d7
Branch: refs/heads/master
Commit: d2b7e6d7f5b666b4684ee8f4620201c4e9b8a95a
Parents: 6d2968c
Author: Robert Gemmell <ro...@apache.org>
Authored: Wed Jan 14 11:07:35 2015 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Wed Jan 14 11:07:35 2015 +0000
----------------------------------------------------------------------
.../src/main/java/org/apache/qpid/jms/JmsConnection.java | 3 ++-
.../main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java | 6 ++++--
2 files changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d2b7e6d7/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
index bc98a85..e16b990 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
@@ -977,10 +977,11 @@ public class JmsConnection implements Connection, TopicConnection, QueueConnecti
return this.connectionInfo.getConnectionId();
}
+ //TODO: unused? remove?
public boolean isWatchRemoteDestinations() {
return this.connectionInfo.isWatchRemoteDestinations();
}
-
+ //TODO: unused? remove?
public void setWatchRemoteDestinations(boolean watchRemoteDestinations) {
this.connectionInfo.setWatchRemoteDestinations(watchRemoteDestinations);
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d2b7e6d7/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
index 24a8ba1..fc101af 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
@@ -103,11 +103,11 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
public void setClientId(String clientId) {
this.clientId = clientId;
}
-
+ //TODO: unused? remove?
public String getClientIp() {
return clientIp;
}
-
+ //TODO: unused? remove?
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
@@ -184,10 +184,12 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
this.requestTimeout = requestTimeout;
}
+ //TODO: unused? remove?
public boolean isWatchRemoteDestinations() {
return watchRemoteDestinations;
}
+ //TODO: unused? remove?
public void setWatchRemoteDestinations(boolean watchRemoteDestinations) {
this.watchRemoteDestinations = watchRemoteDestinations;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org