This closes #384
This commit is contained in:
commit
7d5651eb79
|
@ -36,16 +36,17 @@ public class AutoCreatedQueueManagerImpl implements AutoCreatedQueueManager {
|
|||
Queue queue = server.locateQueue(queueName);
|
||||
long consumerCount = queue.getConsumerCount();
|
||||
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()) {
|
||||
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);
|
||||
}
|
||||
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) {
|
||||
|
|
|
@ -25,6 +25,7 @@ import javax.jms.TextMessage;
|
|||
|
||||
import org.apache.activemq.artemis.api.core.SimpleString;
|
||||
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.core.server.Queue;
|
||||
import org.junit.Assert;
|
||||
|
@ -75,4 +76,49 @@ public class AutoDeleteJmsQueueTest extends JMSTestBase {
|
|||
// ensure the queue was removed
|
||||
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