You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2011/08/17 15:29:35 UTC

svn commit: r1158694 - in /activemq/trunk/activemq-pool/src: main/java/org/apache/activemq/pool/ test/java/org/apache/activemq/pool/

Author: tabish
Date: Wed Aug 17 13:29:35 2011
New Revision: 1158694

URL: http://svn.apache.org/viewvc?rev=1158694&view=rev
Log:
Apply patch for: https://issues.apache.org/jira/browse/AMQ-3457

Modified:
    activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java
    activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java
    activemq/trunk/activemq-pool/src/test/java/org/apache/activemq/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java

Modified: activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java?rev=1158694&r1=1158693&r2=1158694&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java (original)
+++ activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/ConnectionPool.java Wed Aug 17 13:29:35 2011
@@ -144,6 +144,12 @@ public class ConnectionPool {
         lastUsed = System.currentTimeMillis();
         if (referenceCount == 0) {
             expiredCheck();
+            
+            // only clean up temp destinations when all users 
+            // of this connection have called close
+            if (getConnection() != null) {
+                getConnection().cleanUpTempDestinations();
+            }
         }
     }
 

Modified: activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java?rev=1158694&r1=1158693&r2=1158694&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java (original)
+++ activemq/trunk/activemq-pool/src/main/java/org/apache/activemq/pool/PooledConnection.java Wed Aug 17 13:29:35 2011
@@ -16,9 +16,6 @@
  */
 package org.apache.activemq.pool;
 
-import java.util.Iterator;
-import java.util.concurrent.ConcurrentHashMap;
-
 import javax.jms.Connection;
 import javax.jms.ConnectionConsumer;
 import javax.jms.ConnectionMetaData;
@@ -39,7 +36,6 @@ import org.apache.activemq.ActiveMQSessi
 import org.apache.activemq.AlreadyClosedException;
 import org.apache.activemq.EnhancedConnection;
 import org.apache.activemq.advisory.DestinationSource;
-import org.apache.activemq.command.ActiveMQTempDestination;
 
 /**
  * Represents a proxy {@link Connection} which is-a {@link TopicConnection} and
@@ -73,9 +69,6 @@ public class PooledConnection implements
     public void close() throws JMSException {
         if (this.pool != null) {
             this.pool.decrementReferenceCount();
-            if (this.pool.getConnection() != null) {
-                this.pool.getConnection().cleanUpTempDestinations();
-            }
             this.pool = null;
         }
     }

Modified: activemq/trunk/activemq-pool/src/test/java/org/apache/activemq/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-pool/src/test/java/org/apache/activemq/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java?rev=1158694&r1=1158693&r2=1158694&view=diff
==============================================================================
--- activemq/trunk/activemq-pool/src/test/java/org/apache/activemq/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java (original)
+++ activemq/trunk/activemq-pool/src/test/java/org/apache/activemq/pool/PooledConnectionFactoryWithTemporaryDestinationsTest.java Wed Aug 17 13:29:35 2011
@@ -53,6 +53,36 @@ public class PooledConnectionFactoryWith
         broker.stop();
     }
 
+    public void testTemporaryQueueWithMultipleConnectionUsers() throws Exception {
+        Connection pooledConnection = null;
+        Connection pooledConnection2 = null;
+        Session session = null;
+        Session session2 = null;
+        Queue tempQueue = null;
+        Queue normalQueue = null;
+        
+        pooledConnection = pooledFactory.createConnection();
+        session = pooledConnection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        tempQueue = session.createTemporaryQueue();
+        LOG.info("Created queue named: " + tempQueue.getQueueName());
+        
+        assertEquals(1, countBrokerTemporaryQueues());
+        
+        pooledConnection2 = pooledFactory.createConnection();
+        session2 = pooledConnection2.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        normalQueue = session2.createQueue("queue:FOO.TEST");
+        LOG.info("Created queue named: " + normalQueue.getQueueName());        
+
+        // didn't create a temp queue on pooledConnection2 so we should still have a temp queue
+        pooledConnection2.close();        
+        assertEquals(1, countBrokerTemporaryQueues());
+        
+        // after closing pooledConnection, where we created the temp queue, there should 
+        // be no temp queues left
+        pooledConnection.close();        
+        assertEquals(0, countBrokerTemporaryQueues());
+    }
+    
     public void testTemporaryQueueLeakAfterConnectionClose() throws Exception {
         Connection pooledConnection = null;
         Session session = null;