This closes #384

This commit is contained in:
Clebert Suconic 2016-02-09 14:24:51 -05:00
commit 7d5651eb79
2 changed files with 50 additions and 3 deletions

View File

@ -36,16 +36,17 @@ public class AutoCreatedQueueManagerImpl implements AutoCreatedQueueManager {
Queue queue = server.locateQueue(queueName); Queue queue = server.locateQueue(queueName);
long consumerCount = queue.getConsumerCount(); long consumerCount = queue.getConsumerCount();
long messageCount = queue.getMessageCount(); long messageCount = queue.getMessageCount();
boolean isAutoDeleteJmsQueues = server.getAddressSettingsRepository().getMatch(queueName.toString()).isAutoDeleteJmsQueues();
if (server.locateQueue(queueName).getMessageCount() == 0) { if (server.locateQueue(queueName).getMessageCount() == 0 && isAutoDeleteJmsQueues) {
if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) { if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) {
ActiveMQServerLogger.LOGGER.debug("deleting auto-created queue \"" + queueName + "\" because consumerCount = " + consumerCount + " and messageCount = " + messageCount); ActiveMQServerLogger.LOGGER.debug("deleting auto-created queue \"" + queueName + ".\" consumerCount = " + consumerCount + "; messageCount = " + messageCount + "; isAutoDeleteJmsQueues = " + isAutoDeleteJmsQueues);
} }
server.destroyQueue(queueName, null, false); server.destroyQueue(queueName, null, false);
} }
else if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) { else if (ActiveMQServerLogger.LOGGER.isDebugEnabled()) {
ActiveMQServerLogger.LOGGER.debug("NOT deleting auto-created queue \"" + queueName + "\" because consumerCount = " + consumerCount + " and messageCount = " + messageCount); ActiveMQServerLogger.LOGGER.debug("NOT deleting auto-created queue \"" + queueName + ".\" consumerCount = " + consumerCount + "; messageCount = " + messageCount + "; isAutoDeleteJmsQueues = " + isAutoDeleteJmsQueues);
} }
} }
catch (Exception e) { catch (Exception e) {

View File

@ -25,6 +25,7 @@ import javax.jms.TextMessage;
import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.apache.activemq.artemis.tests.util.JMSTestBase;
import org.apache.activemq.artemis.core.server.Queue; import org.apache.activemq.artemis.core.server.Queue;
import org.junit.Assert; import org.junit.Assert;
@ -75,4 +76,49 @@ public class AutoDeleteJmsQueueTest extends JMSTestBase {
// ensure the queue was removed // ensure the queue was removed
Assert.assertNull(server.getPostOffice().getBinding(new SimpleString("jms.queue.test"))); Assert.assertNull(server.getPostOffice().getBinding(new SimpleString("jms.queue.test")));
} }
@Test
public void testAutoDeleteNegative() throws Exception {
server.getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoDeleteJmsQueues(false));
Connection connection = cf.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test");
MessageProducer producer = session.createProducer(queue);
final int numMessages = 100;
for (int i = 0; i < numMessages; i++) {
TextMessage mess = session.createTextMessage("msg" + i);
producer.send(mess);
}
producer.close();
MessageConsumer messageConsumer = session.createConsumer(queue);
connection.start();
for (int i = 0; i < numMessages - 1; i++) {
Message m = messageConsumer.receive(5000);
Assert.assertNotNull(m);
}
session.close();
// ensure the queue is still there
Queue q = (Queue) server.getPostOffice().getBinding(new SimpleString("jms.queue.test")).getBindable();
Assert.assertEquals(1, q.getMessageCount());
Assert.assertEquals(numMessages, q.getMessagesAdded());
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
messageConsumer = session.createConsumer(queue);
Message m = messageConsumer.receive(5000);
Assert.assertNotNull(m);
connection.close();
// ensure the queue was not removed
Assert.assertNotNull(server.getPostOffice().getBinding(new SimpleString("jms.queue.test")));
}
} }