This is an automated email from the ASF dual-hosted git repository.
jgoodyear pushed a commit to branch activemq-5.15.x
in repository https://gitbox.apache.org/repos/asf/activemq.git
The following commit(s) were added to refs/heads/activemq-5.15.x by this push:
new 9f513f8 AMQ7135 : do a purge before deleting the destination
9f513f8 is described below
commit 9f513f88781667df1a2a4b0a85153059dc097295
Author: hkesler <[email protected]>
AuthorDate: Sat Jan 12 22:47:16 2019 -0500
AMQ7135 : do a purge before deleting the destination
---
.../activemq/broker/region/AbstractRegion.java | 3 ++
.../org/apache/activemq/RemoveDestinationTest.java | 41 ++++++++++++++++++++++
2 files changed, 44 insertions(+)
diff --git
a/activemq-broker/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
b/activemq-broker/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
index a18e793..8dcb76c 100644
---
a/activemq-broker/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
+++
b/activemq-broker/src/main/java/org/apache/activemq/broker/region/AbstractRegion.java
@@ -297,6 +297,9 @@ public abstract class AbstractRegion implements Region {
}
}
destinationMap.unsynchronizedRemove(destination, dest);
+ if (dest instanceof Queue){
+ ((Queue) dest).purge();
+ }
dispose(context, dest);
DestinationInterceptor destinationInterceptor =
broker.getDestinationInterceptor();
if (destinationInterceptor != null) {
diff --git
a/activemq-unit-tests/src/test/java/org/apache/activemq/RemoveDestinationTest.java
b/activemq-unit-tests/src/test/java/org/apache/activemq/RemoveDestinationTest.java
index 632294c..80d202e 100644
---
a/activemq-unit-tests/src/test/java/org/apache/activemq/RemoveDestinationTest.java
+++
b/activemq-unit-tests/src/test/java/org/apache/activemq/RemoveDestinationTest.java
@@ -26,6 +26,7 @@ import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
+import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
@@ -35,6 +36,7 @@ import org.apache.activemq.advisory.DestinationSource;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.jmx.DestinationViewMBean;
import org.apache.activemq.command.ActiveMQDestination;
+import org.apache.activemq.command.ActiveMQQueue;
import org.apache.activemq.command.ActiveMQTopic;
import org.apache.activemq.util.Wait;
import org.junit.After;
@@ -75,6 +77,45 @@ public class RemoveDestinationTest {
}
@Test(timeout = 60000)
+ public void testRemoveQueue() throws Exception {
+
+ ActiveMQConnection amqConnection = (ActiveMQConnection)
createConnection(true);
+
+ final DestinationSource destinationSource =
amqConnection.getDestinationSource();
+ Session session = amqConnection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
+ Queue queue = session.createQueue("TEST.FOO");
+ MessageProducer producer = session.createProducer(queue);
+ MessageConsumer consumer = session.createConsumer(queue);
+
+ TextMessage msg = session.createTextMessage("Hellow World");
+ producer.send(msg);
+ assertNotNull(consumer.receive(5000));
+ final ActiveMQQueue amqQueue = (ActiveMQQueue) queue;
+
+ consumer.close();
+ producer.close();
+ session.close();
+
+ assertTrue("Destination discovered", Wait.waitFor(new Wait.Condition()
{
+
+ @Override
+ public boolean isSatisified() throws Exception {
+ return destinationSource.getQueues().contains(amqQueue);
+ }
+ }, TimeUnit.SECONDS.toMillis(30),
TimeUnit.MILLISECONDS.toMillis(100)));
+
+ amqConnection.destroyDestination((ActiveMQDestination) queue);
+
+ assertTrue("Destination is removed", Wait.waitFor(new Wait.Condition()
{
+
+ @Override
+ public boolean isSatisified() throws Exception {
+ return !destinationSource.getQueues().contains(amqQueue);
+ }
+ }, TimeUnit.SECONDS.toMillis(30),
TimeUnit.MILLISECONDS.toMillis(100)));
+ }
+
+ @Test(timeout = 60000)
public void testRemoveDestinationWithoutSubscriber() throws Exception {
ActiveMQConnection amqConnection = (ActiveMQConnection)
createConnection(true);