Author: jstrachan
Date: Sun Jul 23 03:00:37 2006
New Revision: 424697

URL: http://svn.apache.org/viewvc?rev=424697&view=rev
Log:
Added an optional clientIDPrefix property to allow auto-generated client Ids to 
be named to make it easier to manage a running system using JMX. Fixes AMQ-836
You can now specify this clientIDPrefix property on the 
ActiveMQConnectionFactory POJO or via a URI such as

tcp://localhost:61616?jms.clientIDPrefix=Cheese

Added:
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
   (with props)
Modified:
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnection.java
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
    
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
    
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/ActiveMQConnectionFactoryTest.java

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnection.java
 Sun Jul 23 03:00:37 2006
@@ -101,7 +101,6 @@
 
     private static final Log log = LogFactory.getLog(ActiveMQConnection.class);
     private static final IdGenerator connectionIdGenerator = new IdGenerator();
-    private static final IdGenerator clientIdGenerator = new IdGenerator();
 
     public static final String DEFAULT_USER = 
ActiveMQConnectionFactory.DEFAULT_USER;
     public static final String DEFAULT_PASSWORD = 
ActiveMQConnectionFactory.DEFAULT_PASSWORD;
@@ -130,9 +129,11 @@
     private boolean useRetroactiveConsumer;
     private int closeTimeout = 15000;
     
-    private final JMSConnectionStatsImpl stats;
-    private final JMSStatsImpl factoryStats;
     private final Transport transport;
+    private final IdGenerator clientIdGenerator;
+    private final JMSStatsImpl factoryStats;
+    private final JMSConnectionStatsImpl stats;
+    
     private final AtomicBoolean started = new AtomicBoolean(false);
     private final AtomicBoolean closing = new AtomicBoolean(false);
     private final AtomicBoolean closed = new AtomicBoolean(false);
@@ -167,9 +168,13 @@
      * @param password
      * @throws Exception 
      */
-    protected ActiveMQConnection(final Transport transport, JMSStatsImpl 
factoryStats)
+    protected ActiveMQConnection(final Transport transport, IdGenerator 
clientIdGenerator, JMSStatsImpl factoryStats)
             throws Exception {
        
+        this.transport = transport;
+        this.clientIdGenerator = clientIdGenerator;
+        this.factoryStats = factoryStats;
+        
         // Configure a single threaded executor who's core thread can timeout 
if idle
         asyncConnectionThread = new ThreadPoolExecutor(1,1,5,TimeUnit.SECONDS, 
new LinkedBlockingQueue(), new ThreadFactory() {
             public Thread newThread(Runnable r) {
@@ -183,11 +188,9 @@
         this.info.setManageable(true);
         this.connectionSessionId = new SessionId(info.getConnectionId(), -1);
         
-        this.transport = transport;
         this.transport.setTransportListener(this);
 
         this.stats = new JMSConnectionStatsImpl(sessions, this instanceof 
XAConnection);
-        this.factoryStats = factoryStats;
         this.factoryStats.addConnection(this);
     }
 
@@ -1229,6 +1232,7 @@
         ConsumerId consumerId = new ConsumerId(new 
SessionId(info.getConnectionId(), -1),consumerIdGenerator.getNextSequenceId());
         advisoryConsumer = new AdvisoryConsumer(this, consumerId);        
     }
+
 
     /**
      * @return Returns the useAsyncSend.

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQConnectionFactory.java
 Sun Jul 23 03:00:37 2006
@@ -36,6 +36,7 @@
 import org.apache.activemq.management.StatsImpl;
 import org.apache.activemq.transport.Transport;
 import org.apache.activemq.transport.TransportFactory;
+import org.apache.activemq.util.IdGenerator;
 import org.apache.activemq.util.IntrospectionSupport;
 import org.apache.activemq.util.JMSExceptionSupport;
 import org.apache.activemq.util.URISupport;
@@ -60,6 +61,8 @@
     public static final String DEFAULT_USER = null;
     public static final String DEFAULT_PASSWORD = null;
 
+    private IdGenerator clientIdGenerator;
+    private String clientIDPrefix;
     protected URI brokerURL;
     protected String userName;
     protected String password;
@@ -251,7 +254,7 @@
     }
 
     protected ActiveMQConnection createActiveMQConnection(Transport transport, 
JMSStatsImpl stats) throws Exception {
-        ActiveMQConnection connection = new ActiveMQConnection(transport, 
stats);
+        ActiveMQConnection connection = new ActiveMQConnection(transport, 
getClientIdGenerator(), stats);
         return connection;
     }
 
@@ -608,5 +611,35 @@
      */
     public void setNestedMapAndListEnabled(boolean structuredMapsEnabled) {
         this.nestedMapAndListEnabled = structuredMapsEnabled;
+    }
+
+    public String getClientIDPrefix() {
+        return clientIDPrefix;
+    }
+
+    /**
+     * Sets the prefix used by autogenerated JMS Client ID values which are
+     * used if the JMS client does not explicitly specify on.
+     * 
+     * @param clientIDPrefix
+     */
+    public void setClientIDPrefix(String clientIDPrefix) {
+        this.clientIDPrefix = clientIDPrefix;
+    }
+    
+    protected synchronized IdGenerator getClientIdGenerator() {
+        if (clientIdGenerator == null) {
+            if (clientIDPrefix != null) {
+                clientIdGenerator = new IdGenerator(clientIDPrefix);
+            }
+            else {
+                clientIdGenerator = new IdGenerator();
+            }
+        }
+        return clientIdGenerator;
+    }
+
+    protected void setClientIdGenerator(IdGenerator clientIdGenerator) {
+        this.clientIdGenerator = clientIdGenerator;
     }
 }

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnection.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnection.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnection.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnection.java
 Sun Jul 23 03:00:37 2006
@@ -27,6 +27,7 @@
 
 import org.apache.activemq.management.JMSStatsImpl;
 import org.apache.activemq.transport.Transport;
+import org.apache.activemq.util.IdGenerator;
 
 /**
  * The XAConnection interface extends the capability of Connection by providing
@@ -49,15 +50,8 @@
  */
 public class ActiveMQXAConnection extends ActiveMQConnection implements 
XATopicConnection, XAQueueConnection, XAConnection {
 
-    /**
-     * @param transport
-     * @param theUserName
-     * @param thePassword
-     * @param factoryStats
-     * @throws Exception 
-     */
-    protected ActiveMQXAConnection(Transport transport, JMSStatsImpl 
factoryStats) throws Exception {
-        super(transport, factoryStats);
+    protected ActiveMQXAConnection(Transport transport, IdGenerator 
clientIdGenerator, JMSStatsImpl factoryStats) throws Exception {
+        super(transport, clientIdGenerator, factoryStats);
     }
 
     public XASession createXASession() throws JMSException {

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/ActiveMQXAConnectionFactory.java
 Sun Jul 23 03:00:37 2006
@@ -80,7 +80,7 @@
     }
 
     protected ActiveMQConnection createActiveMQConnection(Transport transport, 
JMSStatsImpl stats) throws Exception {
-        ActiveMQXAConnection connection = new ActiveMQXAConnection(transport, 
stats);
+        ActiveMQXAConnection connection = new ActiveMQXAConnection(transport, 
getClientIdGenerator(), stats);
         return connection;
     }
 }

Modified: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/IdGenerator.java
 Sun Jul 23 03:00:37 2006
@@ -49,7 +49,7 @@
                        try {
                                hostName = 
InetAddress.getLocalHost().getHostName();
                                ServerSocket ss = new ServerSocket(0);
-                               stub=hostName + "-" + ss.getLocalPort() + "-" + 
System.currentTimeMillis() + "-";
+                               stub="-" + ss.getLocalPort() + "-" + 
System.currentTimeMillis() + "-";
                                Thread.sleep(100);
                                ss.close();
                        }catch(Exception ioe){
@@ -57,7 +57,7 @@
                        }
                }else{
             hostName="localhost";
-                       stub = hostName + "-1-" +System.currentTimeMillis() 
+"-";
+                       stub = "-1-" +System.currentTimeMillis() +"-";
                }
                UNIQUE_STUB = stub;
        }
@@ -84,7 +84,7 @@
        }
     
     public IdGenerator(){
-        this("ID:");
+        this("ID:" + hostName);
     }
        
        /**

Added: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html?rev=424697&view=auto
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
 (added)
+++ 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
 Sun Jul 23 03:00:37 2006
@@ -0,0 +1,9 @@
+<html>
+<head>
+</head>
+<body>
+
+Some utility classes
+
+</body>
+</html>

Propchange: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/util/package.html
------------------------------------------------------------------------------
    svn:executable = *

Modified: 
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/ActiveMQConnectionFactoryTest.java
URL: 
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/ActiveMQConnectionFactoryTest.java?rev=424697&r1=424696&r2=424697&view=diff
==============================================================================
--- 
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/ActiveMQConnectionFactoryTest.java
 (original)
+++ 
incubator/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/ActiveMQConnectionFactoryTest.java
 Sun Jul 23 03:00:37 2006
@@ -29,6 +29,24 @@
 
 public class ActiveMQConnectionFactoryTest extends CombinationTestSupport {
     
+    public void testUseURIToSetUseClientIDPrefixOnConnectionFactory() throws 
URISyntaxException, JMSException {
+        ActiveMQConnectionFactory cf = new 
ActiveMQConnectionFactory("vm://localhost?jms.clientIDPrefix=Cheese");
+        assertEquals("Cheese", cf.getClientIDPrefix());
+
+        ActiveMQConnection connection = (ActiveMQConnection) 
cf.createConnection();
+        try {
+            connection.start();
+
+            String clientID = connection.getClientID();
+            log.info("Got client ID: " + clientID);
+
+            assertTrue("should start with Cheese! but was: " + clientID, 
clientID.startsWith("Cheese"));
+        }
+        finally {
+            connection.close();
+        }
+    }
+    
     public void testUseURIToSetOptionsOnConnectionFactory() throws 
URISyntaxException, JMSException {
         ActiveMQConnectionFactory cf = new 
ActiveMQConnectionFactory("vm://localhost?jms.useAsyncSend=true");
         assertTrue(cf.isUseAsyncSend());


Reply via email to