Author: jmesnil
Date: 2010-02-23 10:56:30 -0500 (Tue, 23 Feb 2010)
New Revision: 8896
Modified:
trunk/src/main/org/hornetq/jms/server/impl/JMSServerManagerImpl.java
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java
Log:
https://jira.jboss.org/jira/browse/HORNETQ-311: DestroyTopic management method does not
delete the core resources associated to the topic
* when a topic is destroy, destroy *all the core queues bound to the topic address* too.
Modified: trunk/src/main/org/hornetq/jms/server/impl/JMSServerManagerImpl.java
===================================================================
--- trunk/src/main/org/hornetq/jms/server/impl/JMSServerManagerImpl.java 2010-02-23
13:55:56 UTC (rev 8895)
+++ trunk/src/main/org/hornetq/jms/server/impl/JMSServerManagerImpl.java 2010-02-23
15:56:30 UTC (rev 8896)
@@ -28,6 +28,8 @@
import org.hornetq.api.core.HornetQException;
import org.hornetq.api.core.Pair;
import org.hornetq.api.core.TransportConfiguration;
+import org.hornetq.api.core.management.AddressControl;
+import org.hornetq.api.core.management.ResourceNames;
import org.hornetq.api.jms.HornetQJMSClient;
import org.hornetq.core.config.Configuration;
import org.hornetq.core.config.DiscoveryGroupConfiguration;
@@ -346,8 +348,14 @@
destinations.remove(name);
jmsManagementService.unregisterTopic(name);
-
server.getHornetQServerControl().destroyQueue(HornetQDestination.createTopicAddressFromName(name).toString());
-
+ AddressControl addressControl =
(AddressControl)server.getManagementService().getResource(ResourceNames.CORE_ADDRESS +
HornetQDestination.createTopicAddressFromName(name));
+ if (addressControl != null)
+ {
+ for (String queueName : addressControl.getQueueNames())
+ {
+ server.getHornetQServerControl().destroyQueue(queueName);
+ }
+ }
return true;
}
Modified:
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java
===================================================================
---
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java 2010-02-23
13:55:56 UTC (rev 8895)
+++
trunk/tests/src/org/hornetq/tests/integration/jms/server/management/JMSServerControlTest.java 2010-02-23
15:56:30 UTC (rev 8896)
@@ -13,18 +13,19 @@
package org.hornetq.tests.integration.jms.server.management;
-import java.util.Map;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Queue;
+import javax.jms.Session;
import javax.jms.Topic;
import junit.framework.Assert;
import org.hornetq.api.core.TransportConfiguration;
-import org.hornetq.api.core.client.HornetQClient;
+import org.hornetq.api.core.management.AddressControl;
import org.hornetq.api.core.management.ObjectNameBuilder;
+import org.hornetq.api.core.management.ResourceNames;
import org.hornetq.api.jms.management.JMSServerControl;
import org.hornetq.core.config.Configuration;
import org.hornetq.core.config.DiscoveryGroupConfiguration;
@@ -35,6 +36,8 @@
import org.hornetq.core.remoting.impl.invm.TransportConstants;
import org.hornetq.core.server.HornetQServer;
import org.hornetq.core.server.HornetQServers;
+import org.hornetq.jms.client.HornetQConnectionFactory;
+import org.hornetq.jms.client.HornetQDestination;
import org.hornetq.jms.server.JMSServerManager;
import org.hornetq.jms.server.impl.JMSServerManagerImpl;
import org.hornetq.tests.integration.management.ManagementControlHelper;
@@ -176,15 +179,29 @@
UnitTestCase.checkNoBinding(context, topicJNDIBinding);
checkNoResource(ObjectNameBuilder.DEFAULT.getJMSTopicObjectName(topicName));
-
+
JMSServerControl control = createManagementControl();
control.createTopic(topicName, topicJNDIBinding);
- UnitTestCase.checkBinding(context, topicJNDIBinding);
checkResource(ObjectNameBuilder.DEFAULT.getJMSTopicObjectName(topicName));
+ Topic topic = (Topic)context.lookup(topicJNDIBinding);
+ assertNotNull(topic);
+ HornetQConnectionFactory cf = new HornetQConnectionFactory(new
TransportConfiguration(InVMConnectorFactory.class.getName()));
+ Connection connection = cf.createConnection();
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+ // create a consumer will create a Core queue bound to the topic address
+ session.createConsumer(topic);
+ String topicAddress =
HornetQDestination.createTopicAddressFromName(topicName).toString();
+ AddressControl addressControl =
(AddressControl)server.getManagementService().getResource(ResourceNames.CORE_ADDRESS +
topicAddress);
+ assertNotNull(addressControl);
+
+ assertTrue(addressControl.getQueueNames().length > 0);
+
+ connection.close();
control.destroyTopic(topicName);
-
+
+ assertNull(server.getManagementService().getResource(ResourceNames.CORE_ADDRESS +
topicAddress));
UnitTestCase.checkNoBinding(context, topicJNDIBinding);
checkNoResource(ObjectNameBuilder.DEFAULT.getJMSTopicObjectName(topicName));
}