This closes #384
This commit is contained in:
commit
7d5651eb79
|
@ -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) {
|
||||||
|
|
|
@ -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")));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue