http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java index 4b53ec6..642574b 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/AddressSettings.java @@ -56,6 +56,10 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable public static final boolean DEFAULT_AUTO_DELETE_QUEUES = true; + public static final boolean DEFAULT_AUTO_CREATE_TOPICS = true; + + public static final boolean DEFAULT_AUTO_DELETE_TOPICS = true; + public static final long DEFAULT_REDISTRIBUTION_DELAY = -1; public static final long DEFAULT_EXPIRY_DELAY = -1; @@ -114,6 +118,10 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable private Boolean autoDeleteJmsQueues = null; + private Boolean autoCreateJmsTopics = null; + + private Boolean autoDeleteJmsTopics = null; + private Integer managementBrowsePageSize = AddressSettings.MANAGEMENT_BROWSE_PAGE_SIZE; //from amq5 @@ -142,6 +150,8 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable this.slowConsumerPolicy = other.slowConsumerPolicy; this.autoCreateJmsQueues = other.autoCreateJmsQueues; this.autoDeleteJmsQueues = other.autoDeleteJmsQueues; + this.autoCreateJmsTopics = other.autoCreateJmsTopics; + this.autoDeleteJmsTopics = other.autoDeleteJmsTopics; this.managementBrowsePageSize = other.managementBrowsePageSize; this.queuePrefetch = other.queuePrefetch; } @@ -167,6 +177,24 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable return this; } + public boolean isAutoCreateJmsTopics() { + return autoCreateJmsTopics != null ? autoCreateJmsTopics : AddressSettings.DEFAULT_AUTO_CREATE_TOPICS; + } + + public AddressSettings setAutoCreateJmsTopics(final boolean autoCreateJmsTopics) { + this.autoCreateJmsTopics = autoCreateJmsTopics; + return this; + } + + public boolean isAutoDeleteJmsTopics() { + return autoDeleteJmsTopics != null ? autoDeleteJmsTopics : AddressSettings.DEFAULT_AUTO_DELETE_QUEUES; + } + + public AddressSettings setAutoDeleteJmsTopics(final boolean autoDeleteJmsTopics) { + this.autoDeleteJmsTopics = autoDeleteJmsTopics; + return this; + } + public boolean isLastValueQueue() { return lastValueQueue != null ? lastValueQueue : AddressSettings.DEFAULT_LAST_VALUE_QUEUE; } @@ -416,6 +444,12 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable if (autoDeleteJmsQueues == null) { autoDeleteJmsQueues = merged.autoDeleteJmsQueues; } + if (autoCreateJmsTopics == null) { + autoCreateJmsTopics = merged.autoCreateJmsTopics; + } + if (autoDeleteJmsTopics == null) { + autoDeleteJmsTopics = merged.autoDeleteJmsTopics; + } if (managementBrowsePageSize == null) { managementBrowsePageSize = merged.managementBrowsePageSize; } @@ -482,6 +516,10 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable autoDeleteJmsQueues = BufferHelper.readNullableBoolean(buffer); + autoCreateJmsTopics = BufferHelper.readNullableBoolean(buffer); + + autoDeleteJmsTopics = BufferHelper.readNullableBoolean(buffer); + managementBrowsePageSize = BufferHelper.readNullableInteger(buffer); } @@ -509,6 +547,8 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable BufferHelper.sizeOfNullableSimpleString(slowConsumerPolicy != null ? slowConsumerPolicy.toString() : null) + BufferHelper.sizeOfNullableBoolean(autoCreateJmsQueues) + BufferHelper.sizeOfNullableBoolean(autoDeleteJmsQueues) + + BufferHelper.sizeOfNullableBoolean(autoCreateJmsTopics) + + BufferHelper.sizeOfNullableBoolean(autoDeleteJmsTopics) + BufferHelper.sizeOfNullableInteger(managementBrowsePageSize); } @@ -556,6 +596,10 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable BufferHelper.writeNullableBoolean(buffer, autoDeleteJmsQueues); + BufferHelper.writeNullableBoolean(buffer, autoCreateJmsTopics); + + BufferHelper.writeNullableBoolean(buffer, autoDeleteJmsTopics); + BufferHelper.writeNullableInteger(buffer, managementBrowsePageSize); } @@ -587,6 +631,8 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable result = prime * result + ((slowConsumerPolicy == null) ? 0 : slowConsumerPolicy.hashCode()); result = prime * result + ((autoCreateJmsQueues == null) ? 0 : autoCreateJmsQueues.hashCode()); result = prime * result + ((autoDeleteJmsQueues == null) ? 0 : autoDeleteJmsQueues.hashCode()); + result = prime * result + ((autoCreateJmsTopics == null) ? 0 : autoCreateJmsTopics.hashCode()); + result = prime * result + ((autoDeleteJmsTopics == null) ? 0 : autoDeleteJmsTopics.hashCode()); result = prime * result + ((managementBrowsePageSize == null) ? 0 : managementBrowsePageSize.hashCode()); result = prime * result + ((queuePrefetch == null) ? 0 : queuePrefetch.hashCode()); return result; @@ -730,8 +776,20 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable } else if (!autoDeleteJmsQueues.equals(other.autoDeleteJmsQueues)) return false; - else if (!managementBrowsePageSize.equals(other.managementBrowsePageSize)) + + if (autoCreateJmsTopics == null) { + if (other.autoCreateJmsTopics != null) + return false; + } + else if (!autoCreateJmsTopics.equals(other.autoCreateJmsTopics)) return false; + if (autoDeleteJmsTopics == null) { + if (other.autoDeleteJmsTopics != null) + return false; + } + else if (!autoDeleteJmsTopics.equals(other.autoDeleteJmsTopics)) + return false; + if (managementBrowsePageSize == null) { if (other.managementBrowsePageSize != null) return false; @@ -793,6 +851,10 @@ public class AddressSettings implements Mergeable<AddressSettings>, Serializable autoCreateJmsQueues + ", autoDeleteJmsQueues=" + autoDeleteJmsQueues + + ", autoCreateJmsTopics=" + + autoCreateJmsTopics + + ", autoDeleteJmsTopics=" + + autoDeleteJmsTopics + ", managementBrowsePageSize=" + managementBrowsePageSize + "]";
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/artemis-server/src/main/resources/schema/artemis-configuration.xsd ---------------------------------------------------------------------- diff --git a/artemis-server/src/main/resources/schema/artemis-configuration.xsd b/artemis-server/src/main/resources/schema/artemis-configuration.xsd index 38961f0..93d2a9e 100644 --- a/artemis-server/src/main/resources/schema/artemis-configuration.xsd +++ b/artemis-server/src/main/resources/schema/artemis-configuration.xsd @@ -2308,6 +2308,23 @@ </xsd:annotation> </xsd:element> + <xsd:element name="auto-create-jms-topics" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + whether or not to automatically create JMS topics when a producer sends or a consumer subscribes to + a topic + </xsd:documentation> + </xsd:annotation> + </xsd:element> + + <xsd:element name="auto-delete-jms-topics" type="xsd:boolean" default="true" maxOccurs="1" minOccurs="0"> + <xsd:annotation> + <xsd:documentation> + whether or not to delete auto-created JMS topics when the last subscription is closed + </xsd:documentation> + </xsd:annotation> + </xsd:element> + <xsd:element name="management-browse-page-size" type="xsd:int" default="200" maxOccurs="1" minOccurs="0"> <xsd:annotation> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java index c4831bc..63962fb 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationTest.java @@ -288,6 +288,8 @@ public class FileConfigurationTest extends ConfigurationImplTest { assertEquals(SlowConsumerPolicy.NOTIFY, conf.getAddressesSettings().get("a1").getSlowConsumerPolicy()); assertEquals(true, conf.getAddressesSettings().get("a1").isAutoCreateJmsQueues()); assertEquals(true, conf.getAddressesSettings().get("a1").isAutoDeleteJmsQueues()); + assertEquals(true, conf.getAddressesSettings().get("a1").isAutoCreateJmsTopics()); + assertEquals(true, conf.getAddressesSettings().get("a1").isAutoDeleteJmsTopics()); assertEquals("a2.1", conf.getAddressesSettings().get("a2").getDeadLetterAddress().toString()); assertEquals("a2.2", conf.getAddressesSettings().get("a2").getExpiryAddress().toString()); @@ -301,6 +303,8 @@ public class FileConfigurationTest extends ConfigurationImplTest { assertEquals(SlowConsumerPolicy.KILL, conf.getAddressesSettings().get("a2").getSlowConsumerPolicy()); assertEquals(false, conf.getAddressesSettings().get("a2").isAutoCreateJmsQueues()); assertEquals(false, conf.getAddressesSettings().get("a2").isAutoDeleteJmsQueues()); + assertEquals(false, conf.getAddressesSettings().get("a2").isAutoCreateJmsTopics()); + assertEquals(false, conf.getAddressesSettings().get("a2").isAutoDeleteJmsTopics()); assertTrue(conf.getResourceLimitSettings().containsKey("myUser")); assertEquals(104, conf.getResourceLimitSettings().get("myUser").getMaxConnections()); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java ---------------------------------------------------------------------- diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java index 4b84e75..58f7c99 100644 --- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java +++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java @@ -41,6 +41,8 @@ public class AddressSettingsTest extends ActiveMQTestBase { Assert.assertEquals(AddressSettings.DEFAULT_SLOW_CONSUMER_POLICY, addressSettings.getSlowConsumerPolicy()); Assert.assertEquals(AddressSettings.DEFAULT_AUTO_CREATE_QUEUES, addressSettings.isAutoCreateJmsQueues()); Assert.assertEquals(AddressSettings.DEFAULT_AUTO_DELETE_QUEUES, addressSettings.isAutoDeleteJmsQueues()); + Assert.assertEquals(AddressSettings.DEFAULT_AUTO_CREATE_TOPICS, addressSettings.isAutoCreateJmsTopics()); + Assert.assertEquals(AddressSettings.DEFAULT_AUTO_DELETE_TOPICS, addressSettings.isAutoDeleteJmsTopics()); } @Test http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/artemis-server/src/test/resources/ConfigurationTest-full-config.xml ---------------------------------------------------------------------- diff --git a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml index 0514788..ec6d6e9 100644 --- a/artemis-server/src/test/resources/ConfigurationTest-full-config.xml +++ b/artemis-server/src/test/resources/ConfigurationTest-full-config.xml @@ -248,6 +248,8 @@ <slow-consumer-policy>NOTIFY</slow-consumer-policy> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-delete-jms-queues>true</auto-delete-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + <auto-delete-jms-topics>true</auto-delete-jms-topics> </address-setting> <address-setting match="a2"> <dead-letter-address>a2.1</dead-letter-address> @@ -262,6 +264,8 @@ <slow-consumer-policy>KILL</slow-consumer-policy> <auto-create-jms-queues>false</auto-create-jms-queues> <auto-delete-jms-queues>false</auto-delete-jms-queues> + <auto-create-jms-topics>false</auto-create-jms-topics> + <auto-delete-jms-topics>false</auto-delete-jms-topics> </address-setting> </address-settings> <resource-limit-settings> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/docs/user-manual/en/queue-attributes.md ---------------------------------------------------------------------- diff --git a/docs/user-manual/en/queue-attributes.md b/docs/user-manual/en/queue-attributes.md index 9fa326b..22184aa 100644 --- a/docs/user-manual/en/queue-attributes.md +++ b/docs/user-manual/en/queue-attributes.md @@ -90,6 +90,8 @@ entry that would be found in the `broker.xml` file. <slow-consumer-check-period>5</slow-consumer-check-period> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-delete-jms-queues>true</auto-delete-jms-queues> + <auto-create-jms-topics>true</auto-create-jms-topics> + <auto-delete-jms-topics>true</auto-delete-jms-topics> </address-setting> </address-settings> @@ -177,7 +179,18 @@ create a JMS queue when a JMS message is sent to a queue whose name fits the address `match` (remember, a JMS queue is just a core queue which has the same address and queue name) or a JMS consumer tries to connect to a queue whose name fits the address `match`. Queues which are auto-created -are durable, non-temporary, and non-transient. +are durable, non-temporary, and non-transient. Default is `true`. -`auto-delete-jms-queues`. Whether or not to the broker should automatically +`auto-delete-jms-queues`. Whether or not the broker should automatically delete auto-created JMS queues when they have both 0 consumers and 0 messages. +Default is `true`. + +`auto-create-jms-topics`. Whether or not the broker should automatically +create a JMS topic when a JMS message is sent to a topic whose name fits +the address `match` (remember, a JMS topic is just a core address which has +one or more core queues mapped to it) or a JMS consumer tries to subscribe +to a topic whose name fits the address `match`. Default is `true`. + +`auto-delete-jms-topics`. Whether or not the broker should automatically +delete auto-created JMS topics once the last subscription on the topic has +been closed. Default is `true`. http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index d0327fa..d8587e1 100644 --- a/pom.xml +++ b/pom.xml @@ -89,7 +89,7 @@ <activemq.version.majorVersion>1</activemq.version.majorVersion> <activemq.version.minorVersion>0</activemq.version.minorVersion> <activemq.version.microVersion>0</activemq.version.microVersion> - <activemq.version.incrementingVersion>126,125,124,123,122</activemq.version.incrementingVersion> + <activemq.version.incrementingVersion>127,126,125,124,123,122</activemq.version.incrementingVersion> <activemq.version.versionTag>${project.version}</activemq.version.versionTag> <ActiveMQ-Version> ${project.version}(${activemq.version.incrementingVersion}) @@ -236,7 +236,7 @@ <scope>provided</scope> <!-- postgresql license --> </dependency> - + <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections-testframework</artifactId> http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java new file mode 100644 index 0000000..fcc05a3 --- /dev/null +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsDestinationTest.java @@ -0,0 +1,258 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.artemis.tests.integration.client; + +import javax.jms.Connection; +import javax.jms.JMSSecurityException; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; +import javax.jms.TextMessage; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; +import org.apache.activemq.artemis.core.security.Role; +import org.apache.activemq.artemis.core.server.Queue; +import org.apache.activemq.artemis.jms.client.ActiveMQTemporaryTopic; +import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; +import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger; +import org.apache.activemq.artemis.tests.util.JMSTestBase; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class AutoCreateJmsDestinationTest extends JMSTestBase { + + @Test + public void testAutoCreateOnSendToQueue() throws Exception { + 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; i++) { + Message m = messageConsumer.receive(5000); + Assert.assertNotNull(m); + } + + // make sure the JMX control was created for the JMS queue + assertNotNull(server.getManagementService().getResource("jms.queue.test")); + + connection.close(); + } + + @Test + public void testAutoCreateOnSendToQueueAnonymousProducer() throws Exception { + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); + + MessageProducer producer = session.createProducer(null); + + final int numMessages = 100; + + for (int i = 0; i < numMessages; i++) { + TextMessage mess = session.createTextMessage("msg" + i); + producer.send(queue, mess); + } + + producer.close(); + + MessageConsumer messageConsumer = session.createConsumer(queue); + connection.start(); + + for (int i = 0; i < numMessages; i++) { + Message m = messageConsumer.receive(5000); + Assert.assertNotNull(m); + } + + connection.close(); + } + + @Test + public void testAutoCreateOnSendToQueueSecurity() throws Exception { + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addUser("guest", "guest"); + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().setDefaultUser("guest"); + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addRole("guest", "rejectAll"); + Role role = new Role("rejectAll", false, false, false, false, false, false, false); + Set<Role> roles = new HashSet<>(); + roles.add(role); + server.getSecurityRepository().addMatch("#", roles); + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); + MessageProducer producer = session.createProducer(queue); + TextMessage mess = session.createTextMessage("msg"); + + try { + producer.send(mess); + Assert.fail("Sending a message here should throw a JMSSecurityException"); + } + catch (Exception e) { + Assert.assertTrue(e instanceof JMSSecurityException); + } + + connection.close(); + } + + @Test + public void testAutoCreateOnSendToTopic() throws Exception { + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + + MessageProducer producer = session.createProducer(topic); + producer.send(session.createTextMessage("msg")); + + connection.close(); + + assertNotNull(server.getManagementService().getResource("jms.topic.test")); + } + + @Test + public void testAutoCreateOnConsumeFromQueue() throws Exception { + Connection connection = null; + connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); + + MessageConsumer messageConsumer = session.createConsumer(queue); + connection.start(); + + Message m = messageConsumer.receive(500); + Assert.assertNull(m); + + Queue q = (Queue) server.getPostOffice().getBinding(new SimpleString("jms.queue.test")).getBindable(); + Assert.assertEquals(0, q.getMessageCount()); + Assert.assertEquals(0, q.getMessagesAdded()); + connection.close(); + } + + @Test + public void testAutoCreateOnSubscribeToTopic() throws Exception { + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + final String topicName = "test-" + UUID.randomUUID().toString(); + + javax.jms.Topic topic = ActiveMQJMSClient.createTopic(topicName); + + MessageConsumer consumer = session.createConsumer(topic); + MessageProducer producer = session.createProducer(topic); + producer.send(session.createTextMessage("msg")); + connection.start(); + assertNotNull(consumer.receive(500)); + + assertNotNull(server.getManagementService().getResource("jms.topic." + topicName)); + + connection.close(); + + assertNull(server.getManagementService().getResource("jms.topic." + topicName)); + } + + @Test + public void testAutoCreateOnDurableSubscribeToTopic() throws Exception { + Connection connection = cf.createConnection(); + connection.setClientID("myClientID"); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + + MessageConsumer consumer = session.createDurableConsumer(topic, "myDurableSub"); + MessageProducer producer = session.createProducer(topic); + producer.send(session.createTextMessage("msg")); + connection.start(); + assertNotNull(consumer.receive(500)); + + connection.close(); + + assertNotNull(server.getManagementService().getResource("jms.topic.test")); + + assertNotNull(server.locateQueue(SimpleString.toSimpleString("myClientID.myDurableSub"))); + } + + @Test + public void testTemporaryTopic() throws Exception { + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + +// javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + + ActiveMQTemporaryTopic topic = (ActiveMQTemporaryTopic) session.createTemporaryTopic(); + + MessageConsumer consumer = session.createConsumer(topic); + MessageProducer producer = session.createProducer(topic); + producer.send(session.createTextMessage("msg")); + connection.start(); + assertNotNull(consumer.receive(500)); + + SimpleString topicAddress = topic.getSimpleAddress(); + + consumer.close(); + + assertNotNull(server.locateQueue(topicAddress)); + + IntegrationTestLogger.LOGGER.info("Topic name: " + topicAddress); + + topic.delete(); + + connection.close(); + +// assertNotNull(server.getManagementService().getResource("jms.topic.test")); + + assertNull(server.locateQueue(topicAddress)); + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addUser("guest", "guest"); + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().setDefaultUser("guest"); + ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addRole("guest", "allowAll"); + Role role = new Role("allowAll", true, true, true, true, true, true, true); + Set<Role> roles = new HashSet<>(); + roles.add(role); + server.getSecurityRepository().addMatch("#", roles); + } + + @Override + protected boolean useSecurity() { + return true; + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsQueueTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsQueueTest.java deleted file mode 100644 index 54f18dc..0000000 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoCreateJmsQueueTest.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.artemis.tests.integration.client; - -import javax.jms.Connection; -import javax.jms.InvalidDestinationException; -import javax.jms.JMSSecurityException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -import javax.jms.TextMessage; -import java.util.HashSet; -import java.util.Set; - -import org.apache.activemq.artemis.api.core.SimpleString; -import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; -import org.apache.activemq.artemis.core.security.Role; -import org.apache.activemq.artemis.core.server.Queue; -import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager; -import org.apache.activemq.artemis.tests.util.JMSTestBase; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -public class AutoCreateJmsQueueTest extends JMSTestBase { - - @Test - public void testAutoCreateOnSendToQueue() throws Exception { - 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; i++) { - Message m = messageConsumer.receive(5000); - Assert.assertNotNull(m); - } - - // make sure the JMX control was created for the JMS queue - assertNotNull(server.getManagementService().getResource("jms.queue.test")); - - connection.close(); - } - - @Test - public void testAutoCreateOnSendToQueueAnonymousProducer() throws Exception { - Connection connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); - - MessageProducer producer = session.createProducer(null); - - final int numMessages = 100; - - for (int i = 0; i < numMessages; i++) { - TextMessage mess = session.createTextMessage("msg" + i); - producer.send(queue, mess); - } - - producer.close(); - - MessageConsumer messageConsumer = session.createConsumer(queue); - connection.start(); - - for (int i = 0; i < numMessages; i++) { - Message m = messageConsumer.receive(5000); - Assert.assertNotNull(m); - } - - connection.close(); - } - - @Test - public void testAutoCreateOnSendToQueueSecurity() throws Exception { - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addUser("guest", "guest"); - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().setDefaultUser("guest"); - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addRole("guest", "rejectAll"); - Role role = new Role("rejectAll", false, false, false, false, false, false, false); - Set<Role> roles = new HashSet<>(); - roles.add(role); - server.getSecurityRepository().addMatch("#", roles); - Connection connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); - MessageProducer producer = session.createProducer(queue); - TextMessage mess = session.createTextMessage("msg"); - - try { - producer.send(mess); - Assert.fail("Sending a message here should throw a JMSSecurityException"); - } - catch (Exception e) { - Assert.assertTrue(e instanceof JMSSecurityException); - } - - connection.close(); - } - - @Test - public void testAutoCreateOnSendToTopic() throws Exception { - Connection connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); - - try { - MessageProducer producer = session.createProducer(topic); - Assert.fail("Creating a producer here should throw an exception"); - } - catch (Exception e) { - Assert.assertTrue(e instanceof InvalidDestinationException); - } - - connection.close(); - } - - @Test - public void testAutoCreateOnConsumeFromQueue() throws Exception { - Connection connection = null; - connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - javax.jms.Queue queue = ActiveMQJMSClient.createQueue("test"); - - MessageConsumer messageConsumer = session.createConsumer(queue); - connection.start(); - - Message m = messageConsumer.receive(500); - Assert.assertNull(m); - - Queue q = (Queue) server.getPostOffice().getBinding(new SimpleString("jms.queue.test")).getBindable(); - Assert.assertEquals(0, q.getMessageCount()); - Assert.assertEquals(0, q.getMessagesAdded()); - connection.close(); - } - - @Test - public void testAutoCreateOnConsumeFromTopic() throws Exception { - Connection connection = null; - connection = cf.createConnection(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - - javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); - - try { - MessageConsumer messageConsumer = session.createConsumer(topic); - Assert.fail("Creating a consumer here should throw an exception"); - } - catch (Exception e) { - Assert.assertTrue(e instanceof InvalidDestinationException); - } - - connection.close(); - } - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addUser("guest", "guest"); - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().setDefaultUser("guest"); - ((ActiveMQJAASSecurityManager) server.getSecurityManager()).getConfiguration().addRole("guest", "allowAll"); - Role role = new Role("allowAll", true, true, true, true, true, true, true); - Set<Role> roles = new HashSet<>(); - roles.add(role); - server.getSecurityRepository().addMatch("#", roles); - } - - @Override - protected boolean useSecurity() { - return true; - } -} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java new file mode 100644 index 0000000..44bb764 --- /dev/null +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsDestinationTest.java @@ -0,0 +1,199 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.activemq.artemis.tests.integration.client; + +import javax.jms.Connection; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; +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; +import org.junit.Test; + +public class AutoDeleteJmsDestinationTest extends JMSTestBase { + + @Test + public void testAutoDeleteQueue() throws Exception { + 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 removed + Assert.assertNull(server.getPostOffice().getBinding(new SimpleString("jms.queue.test"))); + + // make sure the JMX control was removed for the JMS queue + assertNull(server.getManagementService().getResource("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"))); + } + + @Test + public void testAutoDeleteTopic() throws Exception { + Connection connection = cf.createConnection(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + + MessageConsumer messageConsumer = session.createConsumer(topic); + MessageProducer producer = session.createProducer(topic); + + final int numMessages = 100; + + for (int i = 0; i < numMessages; i++) { + TextMessage mess = session.createTextMessage("msg" + i); + producer.send(mess); + } + + producer.close(); + connection.start(); + + for (int i = 0; i < numMessages; i++) { + Message m = messageConsumer.receive(5000); + Assert.assertNotNull(m); + } + + connection.close(); + + // ensure the topic was removed + Assert.assertNull(server.locateQueue(new SimpleString("jms.topic.test"))); + + // make sure the JMX control was removed for the JMS topic + assertNull(server.getManagementService().getResource("jms.topic.test")); + } + + @Test + public void testAutoDeleteTopicDurableSubscriber() throws Exception { + Connection connection = cf.createConnection(); + connection.setClientID("myClientID"); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + + javax.jms.Topic topic = ActiveMQJMSClient.createTopic("test"); + + MessageConsumer messageConsumer = session.createDurableConsumer(topic, "mySub"); + MessageProducer producer = session.createProducer(topic); + + final int numMessages = 100; + + for (int i = 0; i < numMessages; i++) { + TextMessage mess = session.createTextMessage("msg" + i); + producer.send(mess); + } + + producer.close(); + connection.start(); + + for (int i = 0; i < numMessages; i++) { + Message m = messageConsumer.receive(5000); + Assert.assertNotNull(m); + } + + messageConsumer.close(); + session.unsubscribe("mySub"); + + connection.close(); + + // ensure the topic was removed + Assert.assertNull(server.locateQueue(new SimpleString("jms.topic.test"))); + + // make sure the JMX control was removed for the JMS topic + assertNull(server.getManagementService().getResource("jms.topic.test")); + } +} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsQueueTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsQueueTest.java deleted file mode 100644 index 81cd6ec..0000000 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/AutoDeleteJmsQueueTest.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.activemq.artemis.tests.integration.client; - -import javax.jms.Connection; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Session; -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; -import org.junit.Test; - -public class AutoDeleteJmsQueueTest extends JMSTestBase { - - @Test - public void testAutoDelete() throws Exception { - 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 removed - Assert.assertNull(server.getPostOffice().getBinding(new SimpleString("jms.queue.test"))); - - // make sure the JMX control was removed for the JMS queue - assertNull(server.getManagementService().getResource("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"))); - } -} http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/PagingOrderTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/PagingOrderTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/PagingOrderTest.java index 8c2d9cd..8f87803 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/PagingOrderTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/client/PagingOrderTest.java @@ -607,7 +607,7 @@ public class PagingOrderTest extends ActiveMQTestBase { jmsServer.createTopic(true, "tt", "/topic/TT"); - server.getActiveMQServerControl().addAddressSettings("jms.topic.TT", "DLQ", "DLQ", -1, false, 5, 1024 * 1024, 1024 * 10, 5, 5, 1, 1000, 0, false, "PAGE", -1, 10, "KILL", true, true); + server.getActiveMQServerControl().addAddressSettings("jms.topic.TT", "DLQ", "DLQ", -1, false, 5, 1024 * 1024, 1024 * 10, 5, 5, 1, 1000, 0, false, "PAGE", -1, 10, "KILL", true, true, true, true); ActiveMQJMSConnectionFactory cf = (ActiveMQJMSConnectionFactory) ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, new TransportConfiguration(INVM_CONNECTOR_FACTORY)); @@ -663,7 +663,7 @@ public class PagingOrderTest extends ActiveMQTestBase { jmsServer.setRegistry(new JndiBindingRegistry(context)); jmsServer.start(); - server.getActiveMQServerControl().addAddressSettings("jms.queue.Q1", "DLQ", "DLQ", -1, false, 5, 100 * 1024, 10 * 1024, 5, 5, 1, 1000, 0, false, "PAGE", -1, 10, "KILL", true, true); + server.getActiveMQServerControl().addAddressSettings("jms.queue.Q1", "DLQ", "DLQ", -1, false, 5, 100 * 1024, 10 * 1024, 5, 5, 1, 1000, 0, false, "PAGE", -1, 10, "KILL", true, true, true, true); jmsServer.createQueue(true, "Q1", null, true, "/queue/Q1"); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/jms2client/NonExistentQueueTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/jms2client/NonExistentQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/jms2client/NonExistentQueueTest.java index 913ef9a..1115305 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/jms2client/NonExistentQueueTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/jms/jms2client/NonExistentQueueTest.java @@ -32,6 +32,7 @@ import java.util.Random; import org.apache.activemq.artemis.api.core.TransportConfiguration; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; import org.apache.activemq.artemis.api.jms.JMSFactoryType; +import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.tests.util.JMSTestBase; import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnectorFactory; import org.junit.Assert; @@ -54,6 +55,7 @@ public class NonExistentQueueTest extends JMSTestBase { @Test public void sendToNonExistentDestination() throws Exception { + server.getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoCreateJmsTopics(false)); Destination destination = ActiveMQJMSClient.createTopic("DoesNotExist"); TransportConfiguration transportConfiguration = new TransportConfiguration(InVMConnectorFactory.class.getName()); ConnectionFactory localConnectionFactory = ActiveMQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java index 5595ddf..aa4d685 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java @@ -468,12 +468,14 @@ public class ActiveMQServerControlTest extends ManagementTestBase { String slowConsumerPolicy = SlowConsumerPolicy.KILL.toString(); boolean autoCreateJmsQueues = false; boolean autoDeleteJmsQueues = false; + boolean autoCreateJmsTopics = false; + boolean autoDeleteJmsTopics = false; - serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, maxSizeBytes, pageSizeBytes, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues); + serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, maxSizeBytes, pageSizeBytes, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); boolean ex = false; try { - serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, 100, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues); + serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, 100, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); } catch (Exception expected) { ex = true; @@ -504,8 +506,10 @@ public class ActiveMQServerControlTest extends ManagementTestBase { assertEquals(slowConsumerPolicy, info.getSlowConsumerPolicy()); assertEquals(autoCreateJmsQueues, info.isAutoCreateJmsQueues()); assertEquals(autoDeleteJmsQueues, info.isAutoDeleteJmsQueues()); + assertEquals(autoCreateJmsTopics, info.isAutoCreateJmsTopics()); + assertEquals(autoDeleteJmsTopics, info.isAutoDeleteJmsTopics()); - serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -1, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues); + serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -1, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); jsonString = serverControl.getAddressSettingsAsJSON(exactAddress); info = AddressSettingsInfo.from(jsonString); @@ -528,10 +532,12 @@ public class ActiveMQServerControlTest extends ManagementTestBase { assertEquals(slowConsumerPolicy, info.getSlowConsumerPolicy()); assertEquals(autoCreateJmsQueues, info.isAutoCreateJmsQueues()); assertEquals(autoDeleteJmsQueues, info.isAutoDeleteJmsQueues()); + assertEquals(autoCreateJmsTopics, info.isAutoCreateJmsTopics()); + assertEquals(autoDeleteJmsTopics, info.isAutoDeleteJmsTopics()); ex = false; try { - serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -2, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues); + serverControl.addAddressSettings(addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, -2, 1000, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); } catch (Exception e) { ex = true; http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java index 7519fef..0eb77d4 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlUsingCoreTest.java @@ -587,8 +587,10 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes @Parameter(desc = "how often (in seconds) to check for slow consumers", name = "slowConsumerCheckPeriod") long slowConsumerCheckPeriod, @Parameter(desc = "the policy to use when a slow consumer is detected", name = "slowConsumerPolicy") String slowConsumerPolicy, @Parameter(desc = "allow queues to be created automatically", name = "autoCreateJmsQueues") boolean autoCreateJmsQueues, - @Parameter(desc = "allow auto-created queues to be deleted automatically", name = "autoDeleteJmsQueues") boolean autoDeleteJmsQueues) throws Exception { - proxy.invokeOperation("addAddressSettings", addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, maxSizeBytes, pageSizeBytes, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues); + @Parameter(desc = "allow auto-created queues to be deleted automatically", name = "autoDeleteJmsQueues") boolean autoDeleteJmsQueues, + @Parameter(desc = "allow topics to be created automatically", name = "autoCreateJmsTopics") boolean autoCreateJmsTopics, + @Parameter(desc = "allow auto-created topics to be deleted automatically", name = "autoDeleteJmsTopics") boolean autoDeleteJmsTopics) throws Exception { + proxy.invokeOperation("addAddressSettings", addressMatch, DLA, expiryAddress, expiryDelay, lastValueQueue, deliveryAttempts, maxSizeBytes, pageSizeBytes, pageMaxCacheSize, redeliveryDelay, redeliveryMultiplier, maxRedeliveryDelay, redistributionDelay, sendToDLAOnNoRoute, addressFullMessagePolicy, slowConsumerThreshold, slowConsumerCheckPeriod, slowConsumerPolicy, autoCreateJmsQueues, autoDeleteJmsQueues, autoCreateJmsTopics, autoDeleteJmsTopics); } @Override http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementWithStompTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementWithStompTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementWithStompTest.java index d8b0995..97ef171 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementWithStompTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ManagementWithStompTest.java @@ -30,6 +30,8 @@ import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants; import org.apache.activemq.artemis.core.server.ActiveMQServer; import org.apache.activemq.artemis.core.server.ActiveMQServers; +import org.apache.activemq.artemis.jms.server.JMSServerManager; +import org.apache.activemq.artemis.jms.server.impl.JMSServerManagerImpl; import org.apache.activemq.artemis.utils.RandomUtil; import org.junit.Assert; import org.junit.Before; @@ -52,6 +54,8 @@ public class ManagementWithStompTest extends ManagementTestBase { protected ActiveMQServer server; + protected JMSServerManager jmsServer; + protected ClientSession session; private Socket stompSocket; @@ -169,7 +173,9 @@ public class ManagementWithStompTest extends ManagementTestBase { server = addServer(ActiveMQServers.newActiveMQServer(config, mbeanServer, false, "brianm", "wombats")); - server.start(); + jmsServer = new JMSServerManagerImpl(server); + + jmsServer.start(); locator = createInVMNonHALocator().setBlockOnNonDurableSend(true); ClientSessionFactory sf = createSessionFactory(locator); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsTopicRequestReplyTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsTopicRequestReplyTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsTopicRequestReplyTest.java index 5228d03..ad2e85b 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsTopicRequestReplyTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/JmsTopicRequestReplyTest.java @@ -57,11 +57,16 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa clientConnection = createConnection(); clientConnection.setClientID("ClientConnection:" + name.getMethodName()); + System.out.println("Creating session."); Session session = clientConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); clientConnection.start(); Destination replyDestination = createTemporaryDestination(session); + System.out.println("Created temporary topic " + replyDestination); + + System.out.println("Creating consumer on: " + replyDestination); + MessageConsumer replyConsumer = session.createConsumer(replyDestination); // lets test the destination clientSideClientID = clientConnection.getClientID(); @@ -74,12 +79,15 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa System.out.println("Both the clientID and destination clientID match properly: " + clientSideClientID); /* build queues */ - MessageProducer requestProducer = session.createProducer(requestDestination); - MessageConsumer replyConsumer = session.createConsumer(replyDestination); /* build requestmessage */ TextMessage requestMessage = session.createTextMessage("Olivier"); requestMessage.setJMSReplyTo(replyDestination); + + System.out.println("Creating producer on " + requestDestination); + MessageProducer requestProducer = session.createProducer(requestDestination); + + System.out.println("Sending message to " + requestDestination); requestProducer.send(requestMessage); System.out.println("Sent request."); @@ -116,7 +124,7 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa try { TextMessage requestMessage = (TextMessage) message; - System.out.println("Received request."); + System.out.println("Received request from " + requestDestination); System.out.println(requestMessage.toString()); Destination replyDestination = requestMessage.getJMSReplyTo(); @@ -140,7 +148,7 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa replyProducer.send(replyDestination, replyMessage); } - System.out.println("Sent reply."); + System.out.println("Sent reply to " + replyDestination); System.out.println(replyMessage.toString()); } catch (JMSException e) { @@ -180,6 +188,7 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa requestDestination = createDestination(serverSession); /* build queues */ + System.out.println("Creating consumer on: " + requestDestination); final MessageConsumer requestConsumer = serverSession.createConsumer(requestDestination); if (useAsyncConsume) { requestConsumer.setMessageListener(this); @@ -232,6 +241,7 @@ public class JmsTopicRequestReplyTest extends BasicOpenWireTest implements Messa ((TemporaryTopic) dest).delete(); } else { + System.out.println("Deleting: " + dest); ((TemporaryQueue) dest).delete(); } } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java index 81b5511..41b5c35 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/stomp/StompTest.java @@ -233,6 +233,43 @@ public class StompTest extends StompTestBase { assertNull(server.getActiveMQServer().getPostOffice().getBinding(new SimpleString(ResourceNames.JMS_QUEUE + nonExistentQueue))); } + @Test + public void testSendMessageToNonExistentTopic() throws Exception { + String nonExistentTopic = RandomUtil.randomString(); + String frame = "CONNECT\n" + "login: brianm\n" + "passcode: wombats\n\n" + Stomp.NULL; + sendFrame(frame); + + frame = receiveFrame(10000); + Assert.assertTrue(frame.startsWith("CONNECTED")); + + // first send a message to ensure that sending to a non-existent topic won't throw an error + frame = "SEND\n" + "destination:" + getTopicPrefix() + nonExistentTopic + "\n\n" + "Hello World" + Stomp.NULL; + sendFrame(frame); + receiveFrame(1000); + + // create a subscription on the topic and send/receive another message + MessageConsumer consumer = session.createConsumer(ActiveMQJMSClient.createTopic(nonExistentTopic)); + sendFrame(frame); + receiveFrame(1000); + TextMessage message = (TextMessage) consumer.receive(1000); + Assert.assertNotNull(message); + Assert.assertEquals("Hello World", message.getText()); + // Assert default priority 4 is used when priority header is not set + Assert.assertEquals("getJMSPriority", 4, message.getJMSPriority()); + + // Make sure that the timestamp is valid - should + // be very close to the current time. + long tnow = System.currentTimeMillis(); + long tmsg = message.getJMSTimestamp(); + Assert.assertTrue(Math.abs(tnow - tmsg) < 1500); + + assertNotNull(server.getActiveMQServer().getPostOffice().getBinding(new SimpleString(ResourceNames.JMS_TOPIC + nonExistentTopic))); + + // closing the consumer here should trigger auto-deletion of the topic + consumer.close(); + assertNull(server.getActiveMQServer().getPostOffice().getBinding(new SimpleString(ResourceNames.JMS_TOPIC + nonExistentTopic))); + } + /* * Some STOMP clients erroneously put a new line \n *after* the terminating NUL char at the end of the frame * This means next frame read might have a \n a the beginning. http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/MessageProducerTest.java ---------------------------------------------------------------------- diff --git a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/MessageProducerTest.java b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/MessageProducerTest.java index cb7e493..19bb908 100644 --- a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/MessageProducerTest.java +++ b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/MessageProducerTest.java @@ -32,6 +32,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.apache.activemq.artemis.api.jms.ActiveMQJMSClient; +import org.apache.activemq.artemis.core.settings.impl.AddressSettings; import org.apache.activemq.artemis.jms.tests.message.SimpleJMSMessage; import org.apache.activemq.artemis.jms.tests.message.SimpleJMSTextMessage; import org.apache.activemq.artemis.jms.tests.util.ProxyAssertSupport; @@ -348,6 +349,7 @@ public class MessageProducerTest extends JMSTestCase { @Test public void testCreateProducerOnInexistentDestination() throws Exception { + getJmsServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoCreateJmsTopics(false)); Connection pconn = createConnection(); try { Session ps = pconn.createSession(false, Session.AUTO_ACKNOWLEDGE); http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e53649a6/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/SessionTest.java ---------------------------------------------------------------------- diff --git a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/SessionTest.java b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/SessionTest.java index e6a8909..5f2ad27 100644 --- a/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/SessionTest.java +++ b/tests/jms-tests/src/test/java/org/apache/activemq/artemis/jms/tests/SessionTest.java @@ -172,6 +172,7 @@ public class SessionTest extends ActiveMQServerTestCase { @Test public void testCreateNonExistentTopic() throws Exception { + getJmsServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoCreateJmsTopics(false)); Connection conn = getConnectionFactory().createConnection(); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); try { @@ -201,6 +202,7 @@ public class SessionTest extends ActiveMQServerTestCase { @Test public void testCreateTopicWhileQueueWithSameNameExists() throws Exception { + getJmsServer().getAddressSettingsRepository().addMatch("#", new AddressSettings().setAutoCreateJmsTopics(false)); Connection conn = getConnectionFactory().createConnection(); Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); try {
