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:18 UTC

[4/5] qpid-jms git commit: allow configuring the clientID via the ConnectionFactory using brokerURI or JNDI properties

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