From 8ab7588910ae6391c8ec4a0998886d6fc4cb5f53 Mon Sep 17 00:00:00 2001 From: Andy Taylor Date: Fri, 17 Mar 2017 12:28:10 +0000 Subject: [PATCH] ARTEMIS-1023 - fixx Openwire auto creation of queues https://issues.apache.org/jira/browse/ARTEMIS-1023 --- .../protocol/openwire/OpenWireConnection.java | 2 +- .../artemis/core/server/ActiveMQServer.java | 3 + .../core/server/impl/ActiveMQServerImpl.java | 12 ++++ .../amq/ProducerAutoCreateQueueTest.java | 59 +++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/ProducerAutoCreateQueueTest.java diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java index 46fe372458..6b1b579540 100644 --- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java +++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.java @@ -731,7 +731,7 @@ public class OpenWireConnection extends AbstractRemotingConnection implements Se CheckType checkType = dest.isTemporary() ? CheckType.CREATE_NON_DURABLE_QUEUE : CheckType.CREATE_DURABLE_QUEUE; server.getSecurityStore().check(qName, checkType, this); server.checkQueueCreationLimit(getUsername()); - server.createQueue(qName, RoutingType.ANYCAST, qName, connInfo == null ? null : SimpleString.toSimpleString(connInfo.getUserName()), true, false); + server.createQueue(qName, RoutingType.ANYCAST, qName, connInfo == null ? null : SimpleString.toSimpleString(connInfo.getUserName()), null,true, false); } } } diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java index 5798142867..bfd9aec351 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java @@ -287,6 +287,9 @@ public interface ActiveMQServer extends ServiceComponent { Queue createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable, boolean temporary) throws Exception; + Queue createQueue(final SimpleString address, final RoutingType routingType, final SimpleString queueName, final SimpleString user, + final SimpleString filterString, final boolean durable, final boolean temporary) throws Exception; + Queue createQueue(SimpleString address, RoutingType routingType, SimpleString queueName, SimpleString filter, boolean durable, boolean temporary, int maxConsumers, boolean purgeOnNoConsumers, boolean autoCreateAddress) throws Exception; diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java index c31a32320b..7351b1e12b 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java @@ -1527,6 +1527,18 @@ public class ActiveMQServerImpl implements ActiveMQServer { return createQueue(address, routingType, queueName, filterString, durable, temporary, as.getDefaultMaxConsumers(), as.isDefaultPurgeOnNoConsumers(), as.isAutoCreateAddresses()); } + @Override + public Queue createQueue(final SimpleString address, + final RoutingType routingType, + final SimpleString queueName, + final SimpleString user, + final SimpleString filterString, + final boolean durable, + final boolean temporary) throws Exception { + AddressSettings as = getAddressSettingsRepository().getMatch(address.toString()); + return createQueue(address, routingType, queueName, filterString, user, durable, temporary, false, as.getDefaultMaxConsumers(), as.isDefaultPurgeOnNoConsumers(), as.isAutoCreateAddresses()); + } + @Override public Queue createQueue(final SimpleString address, final RoutingType routingType, diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/ProducerAutoCreateQueueTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/ProducerAutoCreateQueueTest.java new file mode 100644 index 0000000000..c45ff7d888 --- /dev/null +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/openwire/amq/ProducerAutoCreateQueueTest.java @@ -0,0 +1,59 @@ +/* + * 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.openwire.amq; + +import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.core.config.Configuration; +import org.apache.activemq.artemis.core.settings.impl.AddressSettings; +import org.apache.activemq.artemis.tests.integration.openwire.BasicOpenWireTest; +import org.junit.Assert; +import org.junit.Test; + +import javax.jms.Connection; +import javax.jms.MessageProducer; +import javax.jms.Queue; +import javax.jms.Session; +import java.util.Map; + +public class ProducerAutoCreateQueueTest extends BasicOpenWireTest { + + @Override + protected void extraServerConfig(Configuration serverConfig) { + String match = "#"; + Map asMap = serverConfig.getAddressesSettings(); + asMap.get(match).setAutoCreateAddresses(true).setAutoCreateQueues(true); + } + + @Test + public void testProducerBlockWontGetTimeout() throws Exception { + Connection connection = null; + try { + connection = factory.createConnection("admin", "password"); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Queue trash = session.createQueue("trash"); + final MessageProducer producer = session.createProducer(trash); + producer.send(session.createTextMessage("foo")); + Assert.assertNotNull(server.getPostOffice().getBinding(new SimpleString("trash"))); + } finally { + if (connection != null) { + connection.close(); + } + } + + + } +}