You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by gt...@apache.org on 2012/02/06 13:05:18 UTC

svn commit: r1240994 - in /activemq/trunk/activemq-core/src: main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java

Author: gtully
Date: Mon Feb  6 12:05:17 2012
New Revision: 1240994

URL: http://svn.apache.org/viewvc?rev=1240994&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3695 - ensure destination deletion removes entry in the acks table

Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java
    activemq/trunk/activemq-core/src/test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java?rev=1240994&r1=1240993&r2=1240994&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/store/jdbc/JDBCPersistenceAdapter.java Mon Feb  6 12:05:17 2012
@@ -201,11 +201,29 @@ public class JDBCPersistenceAdapter exte
 
     /**
      * Cleanup method to remove any state associated with the given destination
-     * No state retained.... nothing to do
-     *
      * @param destination Destination to forget
      */
     public void removeQueueMessageStore(ActiveMQQueue destination) {
+        if (destination.isQueue() && getBrokerService().shouldRecordVirtualDestination(destination)) {
+            try {
+                removeConsumerDestination(destination);
+            } catch (IOException ioe) {
+                LOG.error("Failed to remove consumer destination: " + destination, ioe);
+            }
+        }
+    }
+
+    private void removeConsumerDestination(ActiveMQQueue destination) throws IOException {
+        TransactionContext c = getTransactionContext();
+        try {
+            String id = destination.getQualifiedName();
+            getAdapter().doDeleteSubscription(c, destination, id, id);
+        } catch (SQLException e) {
+            JDBCPersistenceAdapter.log("JDBC Failure: ", e);
+            throw IOExceptionSupport.create("Failed to remove consumer destination: " + destination, e);
+        } finally {
+            c.close();
+        }
     }
 
     /**

Modified: activemq/trunk/activemq-core/src/test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java?rev=1240994&r1=1240993&r2=1240994&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java (original)
+++ activemq/trunk/activemq-core/src/test/java/org/apache/activemq/store/PersistenceAdapterTestSupport.java Mon Feb  6 12:05:17 2012
@@ -97,4 +97,11 @@ abstract public class PersistenceAdapter
 
     }
 
+    public void testAddRemoveConsumerDest() throws Exception {
+        ActiveMQQueue consumerQ = new ActiveMQQueue("Consumer.A.VirtualTopicTest");
+        MessageStore ms = pa.createQueueMessageStore(consumerQ);
+        pa.removeQueueMessageStore(consumerQ);
+        assertFalse(pa.getDestinations().contains(consumerQ));
+    }
+
 }