You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2016/12/07 18:18:37 UTC

[34/55] [abbrv] activemq-artemis git commit: Fix HangConsumerTest

Fix HangConsumerTest

Comment on failure in TemporaryQueueClusterTest

Fix StompV12Test.testHeaderRepetitive

Fix ManagementWithStompTest

Checkstyle, etc.

Don't throw so many exceptions

Update ClientSession API for autoCreated queues

Add deleteAddress role

Fix examples

Fix XML parsing for address roles

Fix ArtemisTest failures

Fix Joram tests

Use timeout on script to prevent hang

Generic controls for auto queue/address creation

Fix AddressingTest

Fix AddressCommandTest

Fix TemporaryQueueClusterTest

Fix InterceptorTest

Fix StompV12Test

Fix SimpleOpenWireTest and a few other things

Fix checkstyle

Fix MessageProducerTest

Fix SessionTest

User ServerSession to create Stomp queues/addresses

Fixing handful of issues

Fix BasicSecurityTest


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/74977493
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/74977493
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/74977493

Branch: refs/heads/ARTEMIS-780
Commit: 74977493a8e9c84d180b469b7351eb72494ee3c2
Parents: f5b01c6
Author: jbertram <jb...@apache.com>
Authored: Tue Nov 15 17:10:17 2016 -0600
Committer: Clebert Suconic <cl...@apache.org>
Committed: Wed Dec 7 13:16:34 2016 -0500

----------------------------------------------------------------------
 .../artemis/cli/commands/AbstractAction.java    |   1 -
 .../activemq/artemis/cli/commands/Create.java   |  37 ++-
 .../cli/commands/address/CreateAddress.java     |   1 -
 .../cli/commands/address/ShowAddress.java       |   3 +-
 .../artemis/cli/commands/etc/broker.xml         |   4 +-
 .../apache/activemq/cli/test/ArtemisTest.java   |  18 +-
 .../config/ActiveMQDefaultConfiguration.java    |   4 +-
 .../artemis/api/core/client/ClientSession.java  |  28 +++
 .../core/management/ActiveMQServerControl.java  |  33 ++-
 .../api/core/management/ObjectNameBuilder.java  |   2 +-
 .../core/client/impl/ClientSessionImpl.java     |  37 ++-
 .../core/impl/ActiveMQSessionContext.java       |   6 +-
 .../core/protocol/core/impl/PacketDecoder.java  |   6 +
 .../core/protocol/core/impl/PacketImpl.java     |   2 +
 .../impl/wireformat/CreateQueueMessage.java     |  26 ++-
 .../impl/wireformat/CreateQueueMessage_V2.java  |  99 ++++++++
 .../activemq/artemis/core/security/Role.java    |  23 +-
 .../spi/core/remoting/SessionContext.java       |   3 +-
 .../artemis/utils/SecurityFormatter.java        |   7 +-
 .../src/test/scripts/validate-instalation.sh    |   4 +-
 artemis-features/src/main/resources/artemis.xml |   4 +-
 .../jms/client/ActiveMQMessageProducer.java     |   2 +-
 .../artemis/jms/client/ActiveMQSession.java     |   9 +-
 .../jms/server/impl/JMSServerManagerImpl.java   |   4 +-
 .../protocol/openwire/OpenWireConnection.java   |   1 -
 .../core/protocol/openwire/amq/AMQSession.java  |   2 +-
 .../core/protocol/stomp/StompConnection.java    |  26 ++-
 .../deployers/impl/FileConfigurationParser.java |  26 +++
 .../impl/ActiveMQServerControlImpl.java         |  91 ++++++--
 .../core/persistence/config/PersistedRoles.java |  29 ++-
 .../journal/AbstractJournalStorageManager.java  |   1 +
 .../core/postoffice/impl/PostOfficeImpl.java    |   4 +-
 .../core/ServerSessionPacketHandler.java        |  13 +-
 .../artemis/core/server/ActiveMQServer.java     |   1 -
 .../artemis/core/server/ServerSession.java      |   2 +-
 .../core/server/impl/ActiveMQServerImpl.java    |  27 ++-
 .../artemis/core/server/impl/AddressInfo.java   |  11 +
 .../impl/AutoCreatedQueueManagerImpl.java       |   8 +-
 .../artemis/core/server/impl/QueueImpl.java     |   2 +-
 .../core/server/impl/ServerSessionImpl.java     |   7 +-
 .../core/settings/impl/AddressSettings.java     | 167 +++++++++++--
 .../resources/schema/artemis-configuration.xsd  |  43 +++-
 .../core/config/impl/FileConfigurationTest.java |   4 +-
 .../artemis/core/security/RoleTest.java         |  20 +-
 .../core/settings/AddressSettingsTest.java      |  10 +-
 .../artemis/core/settings/RepositoryTest.java   |  14 +-
 .../resources/ConfigurationTest-full-config.xml |   8 +
 artemis-tools/pom.xml                           |   2 +-
 docs/user-manual/en/queue-attributes.md         |  32 ++-
 .../clustered-durable-subscription/readme.html  |   1 -
 .../ClusteredDurableSubscriptionExample.java    |   2 +
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../clustered/clustered-grouping/readme.html    |   2 -
 .../main/resources/activemq/server0/broker.xml  |   5 +-
 .../main/resources/activemq/server1/broker.xml  |   5 +-
 .../main/resources/activemq/server2/broker.xml  |   5 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../clustered/clustered-queue/readme.html       |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../clustered-static-discovery-uri/readme.html  |   1 -
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server2/broker.xml  |   2 +-
 .../main/resources/activemq/server3/broker.xml  |   2 +-
 .../clustered-static-discovery/readme.html      |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server2/broker.xml  |   3 +-
 .../main/resources/activemq/server3/broker.xml  |   3 +-
 .../clustered-static-oneway/readme.html         |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server2/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../clustered/clustered-topic/readme.html       |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   5 +-
 .../main/resources/activemq/server1/broker.xml  |   5 +-
 .../clustered/symmetric-cluster/readme.html     |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server2/broker.xml  |   3 +-
 .../main/resources/activemq/server3/broker.xml  |   3 +-
 .../main/resources/activemq/server4/broker.xml  |   3 +-
 .../main/resources/activemq/server5/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   9 +-
 .../main/resources/activemq/server1/broker.xml  |   9 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   1 -
 .../main/resources/activemq/server1/broker.xml  |   1 -
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server2/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   7 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   3 +-
 .../main/resources/activemq/server1/broker.xml  |   3 +-
 .../main/resources/activemq/server0/broker.xml  |  10 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 examples/features/standard/cdi/pom.xml          |  12 +
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |  18 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server1/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../jms/example/LargeMessageExample.java        |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../artemis/jms/example/ManagementExample.java  |  10 +-
 .../main/resources/activemq/server0/broker.xml  |   8 +-
 .../main/resources/activemq/server0/broker.xml  |   8 +-
 .../main/resources/activemq/server0/broker.xml  |   8 +-
 .../jms/example/PreacknowledgeExample.java      |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   6 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../main/resources/activemq/server0/broker.xml  |   4 +-
 .../main/resources/activemq/server0/broker.xml  |   8 +-
 .../artemis/jms/example/ProtonCPPExample.java   |   3 +-
 .../main/resources/activemq/server0/broker.xml  |   2 +-
 .../integration/addressing/AddressingTest.java  |   6 +-
 .../integration/amqp/AmqpClientTestSupport.java |   2 +-
 .../integration/cli/AddressCommandTest.java     |   4 -
 .../tests/integration/cli/QueueCommandTest.java |   4 +-
 .../client/AutoCreateJmsDestinationTest.java    |   4 +-
 .../tests/integration/client/SessionTest.java   |   3 +-
 .../cluster/failover/SecurityFailoverTest.java  |   2 +-
 .../crossprotocol/AMQPToOpenwireTest.java       |   2 +-
 .../crossprotocol/OpenWireToAMQPTest.java       |   2 +-
 .../interceptors/InterceptorTest.java           |   8 +-
 .../jms/cluster/AutoCreateQueueClusterTest.java |  10 +-
 .../jms/cluster/TemporaryQueueClusterTest.java  |   2 +-
 .../jms/jms2client/NonExistentQueueTest.java    |   4 +-
 .../management/ActiveMQServerControlTest.java   |   4 +-
 .../ActiveMQServerControlUsingCoreTest.java     |  42 +++-
 .../management/AddressControlTest.java          |   4 +-
 .../management/AddressControlUsingCoreTest.java |   2 +-
 .../management/ManagementWithStompTest.java     | 232 -------------------
 ...tyManagementWithConfiguredAdminUserTest.java |   4 +-
 .../management/SecurityNotificationTest.java    |   4 +-
 .../mqtt/imported/MQTTTestSupport.java          |   3 +-
 .../integration/openwire/OpenWireTestBase.java  |  10 +-
 .../openwire/SimpleOpenWireTest.java            |  21 +-
 .../RolesConfigurationStorageTest.java          |  10 +-
 .../ra/ActiveMQMessageHandlerSecurityTest.java  |   2 +-
 .../tests/integration/ra/JMSContextTest.java    |   2 +-
 .../integration/ra/OutgoingConnectionTest.java  |   2 +-
 .../ra/OutgoingConnectionTestJTA.java           |   2 +-
 .../integration/security/LDAPSecurityTest.java  |   4 +-
 .../integration/security/SecurityTest.java      | 102 ++++----
 .../integration/server/ResourceLimitTest.java   |   2 +-
 .../integration/ssl/DualAuthenticationTest.java |   4 +-
 .../tests/integration/stomp/StompTest.java      |  58 +++++
 .../tests/integration/stomp/StompTestBase.java  |   8 +-
 .../integration/stomp/v12/StompV12Test.java     |   7 +-
 .../tests/util/JMSClusteredTestBase.java        |   2 -
 .../src/test/resources/reload-test-jms.xml      |   2 +-
 .../test/resources/reload-test-updated-jms.xml  |   2 +-
 .../artemis/jms/tests/MessageProducerTest.java  |   4 +-
 .../activemq/artemis/jms/tests/SessionTest.java |  13 +-
 .../jms/tests/message/MessageHeaderTest.java    |  30 ++-
 .../jms/conform/session/TopicSessionTest.java   |   2 +
 .../impl/ActiveMQSecurityManagerImplTest.java   |  28 +--
 190 files changed, 1178 insertions(+), 763 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/AbstractAction.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/AbstractAction.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/AbstractAction.java
index b4dbba8..3619ed7 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/AbstractAction.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/AbstractAction.java
@@ -16,7 +16,6 @@
  */
 package org.apache.activemq.artemis.cli.commands;
 
-import io.airlift.airline.Option;
 import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
 import org.apache.activemq.artemis.api.core.client.ClientMessage;
 import org.apache.activemq.artemis.api.core.client.ClientRequestor;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
index 1ae82b3..ff2753a 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/Create.java
@@ -197,11 +197,11 @@ public class Create extends InputAbstract {
    @Option(name = "--no-web", description = "This will remove the web server definition from bootstrap.xml")
    boolean noWeb;
 
-   @Option(name = "--queues", description = "comma separated list of jms queues.")
+   @Option(name = "--queues", description = "comma separated list of queues.")
    String queues;
 
-   @Option(name = "--topics", description = "comma separated list of jms topics ")
-   String topics;
+   @Option(name = "--addresses", description = "comma separated list of addresses ")
+   String addresses;
 
    @Option(name = "--aio", description = "Force aio journal on the configuration regardless of the library being available or not.")
    boolean forceLibaio;
@@ -632,7 +632,7 @@ public class Create extends InputAbstract {
          filters.put("${cluster-password}", "");
       }
 
-      applyJMSObjects(filters);
+      applyAddressesAndQueues(filters);
 
       if (home != null) {
          filters.put("${home}", path(home, false));
@@ -784,12 +784,33 @@ public class Create extends InputAbstract {
       for (String str : getQueueList()) {
          printWriter.println("      <queue name=\"" + str + "\"/>");
       }
-      for (String str : getTopicList()) {
+      for (String str : getAddressList()) {
          printWriter.println("      <topic name=\"" + str + "\"/>");
       }
       filters.put("${jms-list.settings}", writer.toString());
    }
 
+   /**
+    * It will create the address and queue configurations
+    */
+   private void applyAddressesAndQueues(HashMap<String, String> filters) {
+      StringWriter writer = new StringWriter();
+      PrintWriter printWriter = new PrintWriter(writer);
+      printWriter.println();
+
+      for (String str : getQueueList()) {
+         printWriter.println("         <address name=\"" + str + "\" type=\"anycast\">");
+         printWriter.println("            <queues>");
+         printWriter.println("               <queue name=\"" + str + "\" />");
+         printWriter.println("            </queues>");
+         printWriter.println("         </address>");
+      }
+      for (String str : getAddressList()) {
+         printWriter.println("         <address name=\"" + str + "\" type=\"multicast\"/>");
+      }
+      filters.put("${address-queue.settings}", writer.toString());
+   }
+
    private void performAutoTune(HashMap<String, String> filters, boolean aio, File dataFolder) {
       if (noAutoTune) {
          filters.put("${journal-buffer.settings}", "");
@@ -862,11 +883,11 @@ public class Create extends InputAbstract {
       }
    }
 
-   private String[] getTopicList() {
-      if (topics == null) {
+   private String[] getAddressList() {
+      if (addresses == null) {
          return new String[0];
       } else {
-         return topics.split(",");
+         return addresses.split(",");
       }
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/CreateAddress.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/CreateAddress.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/CreateAddress.java
index 6c92dc6..86aafaf 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/CreateAddress.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/CreateAddress.java
@@ -23,7 +23,6 @@ import org.apache.activemq.artemis.api.core.client.ClientMessage;
 import org.apache.activemq.artemis.api.core.management.ManagementHelper;
 import org.apache.activemq.artemis.cli.commands.AbstractAction;
 import org.apache.activemq.artemis.cli.commands.ActionContext;
-import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 
 @Command(name = "create", description = "create an address")
 public class CreateAddress extends AbstractAction {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/ShowAddress.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/ShowAddress.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/ShowAddress.java
index 34331bb..013b504 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/ShowAddress.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/ShowAddress.java
@@ -46,8 +46,7 @@ public class ShowAddress extends AbstractAction {
          public void setUpInvocation(ClientMessage message) throws Exception {
             if (bindings) {
                ManagementHelper.putOperationInvocation(message, "broker", "listBindingsForAddress", getName());
-            }
-            else {
+            } else {
                ManagementHelper.putOperationInvocation(message, "broker", "getAddressInfo", getName());
             }
          }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
index 0871ab6..6c7f91c 100644
--- a/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
+++ b/artemis-cli/src/main/resources/org/apache/activemq/artemis/cli/commands/etc/broker.xml
@@ -74,6 +74,8 @@ ${cluster-security.settings}${cluster.settings}${replicated.settings}${shared-st
             <permission type="deleteNonDurableQueue" roles="${role}"/>
             <permission type="createDurableQueue" roles="${role}"/>
             <permission type="deleteDurableQueue" roles="${role}"/>
+            <permission type="createAddress" roles="${role}"/>
+            <permission type="deleteAddress" roles="${role}"/>
             <permission type="consume" roles="${role}"/>
             <permission type="browse" roles="${role}"/>
             <permission type="send" roles="${role}"/>
@@ -105,7 +107,7 @@ ${cluster-security.settings}${cluster.settings}${replicated.settings}${shared-st
             <queues>
                <queue name="ExpiryQueue" />
             </queues>
-         </address>
+         </address>${address-queue.settings}
       </addresses>
 
    </core>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
index 3c03ab2..85d194a 100644
--- a/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
+++ b/artemis-cli/src/test/java/org/apache/activemq/cli/test/ArtemisTest.java
@@ -533,20 +533,20 @@ public class ArtemisTest {
       File instanceFolder = temporaryFolder.newFolder(folderName);
 
       setupAuth(instanceFolder);
-      String queues = "q1,t2";
-      String topics = "t1,t2";
+      String queues = "q1,q2";
+      String addresses = "a1,a2";
 
 
       // This is usually set when run from the command line via artemis.profile
-      Run.setEmbedded(false);
-      Artemis.main("create", instanceFolder.getAbsolutePath(), "--force", "--silent", "--no-web", "--queues", queues, "--topics", topics, "--no-autotune", "--require-login");
+      Run.setEmbedded(true);
+      Artemis.main("create", instanceFolder.getAbsolutePath(), "--force", "--silent", "--no-web", "--queues", queues, "--addresses", addresses, "--no-autotune", "--require-login");
       System.setProperty("artemis.instance", instanceFolder.getAbsolutePath());
 
       // Some exceptions may happen on the initialization, but they should be ok on start the basic core protocol
       Artemis.internalExecute("run");
 
-      Artemis.main("queue", "create", "--name", "q1", "--address", "q1", "--user", "admin", "--password", "admin");
-      Artemis.main("queue", "create", "--name", "t2", "--address", "t2", "--user", "admin", "--password", "admin");
+//      Artemis.main("queue", "create", "--name", "q1", "--address", "q1", "--user", "admin", "--password", "admin", "--autoCreateAddress");
+//      Artemis.main("queue", "create", "--name", "t2", "--address", "t2", "--user", "admin", "--password", "admin", "--autoCreateAddress");
 
       try {
          try (ServerLocator locator = ServerLocatorImpl.newLocator("tcp://localhost:61616");
@@ -556,9 +556,9 @@ public class ArtemisTest {
                ClientSession.QueueQuery queryResult = coreSession.queueQuery(SimpleString.toSimpleString(str));
                assertTrue("Couldn't find queue " + str, queryResult.isExists());
             }
-            for (String str : topics.split(",")) {
-               ClientSession.QueueQuery queryResult = coreSession.queueQuery(SimpleString.toSimpleString(str));
-               assertTrue("Couldn't find topic " + str, queryResult.isExists());
+            for (String str : addresses.split(",")) {
+               ClientSession.AddressQuery queryResult = coreSession.addressQuery(SimpleString.toSimpleString(str));
+               assertTrue("Couldn't find address " + str, queryResult.isExists());
             }
          }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
index e9212f2..6fb5580 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/config/ActiveMQDefaultConfiguration.java
@@ -162,8 +162,8 @@ public final class ActiveMQDefaultConfiguration {
    // the name of the address that consumers bind to receive management notifications
    private static SimpleString DEFAULT_MANAGEMENT_NOTIFICATION_ADDRESS = new SimpleString("activemq.notifications");
 
-   // The default address used for clustering
-   private static String DEFAULT_CLUSTER_ADDRESS = "jms";
+   // The default address used for clustering, empty string means all addresses
+   private static String DEFAULT_CLUSTER_ADDRESS = "";
 
    // Cluster username. It applies to all cluster configurations.
    private static String DEFAULT_CLUSTER_USER = "ACTIVEMQ.CLUSTER.ADMIN.USER";

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientSession.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientSession.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientSession.java
index 35bc9f9..72b1a11 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientSession.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/client/ClientSession.java
@@ -294,6 +294,34 @@ public interface ClientSession extends XAResource, AutoCloseable {
    void createQueue(String address, String queueName, String filter, boolean durable) throws ActiveMQException;
 
    /**
+    * Creates a <em>non-temporary</em> queue.
+    *
+    * @param address     the queue will be bound to this address
+    * @param queueName   the name of the queue
+    * @param filter      only messages which match this filter will be put in the queue
+    * @param durable     whether the queue is durable or not
+    * @param autoCreated whether to mark this queue as autoCreated or not
+    * @throws ActiveMQException in an exception occurs while creating the queue
+    */
+   void createQueue(SimpleString address,
+                    SimpleString queueName,
+                    SimpleString filter,
+                    boolean durable,
+                    boolean autoCreated) throws ActiveMQException;
+
+   /**
+    * Creates a <em>non-temporary</em>queue.
+    *
+    * @param address     the queue will be bound to this address
+    * @param queueName   the name of the queue
+    * @param filter      only messages which match this filter will be put in the queue
+    * @param durable     whether the queue is durable or not
+    * @param autoCreated whether to mark this queue as autoCreated or not
+    * @throws ActiveMQException in an exception occurs while creating the queue
+    */
+   void createQueue(String address, String queueName, String filter, boolean durable, boolean autoCreated) throws ActiveMQException;
+
+   /**
     * Creates a <em>temporary</em> queue.
     *
     * @param address   the queue will be bound to this address

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
index 0654dbf..33584bf 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ActiveMQServerControl.java
@@ -811,7 +811,8 @@ public interface ActiveMQServerControl {
                             @Parameter(desc = "a comma-separated list of roles allowed to delete non durable queues", name = "deleteNonDurableQueueRoles") String deleteNonDurableQueueRoles,
                             @Parameter(desc = "a comma-separated list of roles allowed to send management messages messages", name = "manage") String manageRoles,
                             @Parameter(desc = "a comma-separated list of roles allowed to browse queues", name = "browse") String browseRoles,
-                            @Parameter(desc = "a comma-separated list of roles allowed to create addresses", name = "createAddressRoles") String createAddressRoles) throws Exception;
+                            @Parameter(desc = "a comma-separated list of roles allowed to create addresses", name = "createAddressRoles") String createAddressRoles,
+                            @Parameter(desc = "a comma-separated list of roles allowed to delete addresses", name = "deleteAddressRoles") String deleteAddressRoles) throws Exception;
 
    @Operation(desc = "Remove security settings for an address", impact = MBeanOperationInfo.ACTION)
    void removeSecuritySettings(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
@@ -848,6 +849,36 @@ public interface ActiveMQServerControl {
                            @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;
+   /**
+    * adds a new address setting for a specific address
+    */
+   @Operation(desc = "Add address settings for addresses matching the addressMatch", impact = MBeanOperationInfo.ACTION)
+   void addAddressSettings(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch,
+                           @Parameter(desc = "the dead letter address setting", name = "DLA") String DLA,
+                           @Parameter(desc = "the expiry address setting", name = "expiryAddress") String expiryAddress,
+                           @Parameter(desc = "the expiry delay setting", name = "expiryDelay") long expiryDelay,
+                           @Parameter(desc = "are any queues created for this address a last value queue", name = "lastValueQueue") boolean lastValueQueue,
+                           @Parameter(desc = "the delivery attempts", name = "deliveryAttempts") int deliveryAttempts,
+                           @Parameter(desc = "the max size in bytes", name = "maxSizeBytes") long maxSizeBytes,
+                           @Parameter(desc = "the page size in bytes", name = "pageSizeBytes") int pageSizeBytes,
+                           @Parameter(desc = "the max number of pages in the soft memory cache", name = "pageMaxCacheSize") int pageMaxCacheSize,
+                           @Parameter(desc = "the redelivery delay", name = "redeliveryDelay") long redeliveryDelay,
+                           @Parameter(desc = "the redelivery delay multiplier", name = "redeliveryMultiplier") double redeliveryMultiplier,
+                           @Parameter(desc = "the maximum redelivery delay", name = "maxRedeliveryDelay") long maxRedeliveryDelay,
+                           @Parameter(desc = "the redistribution delay", name = "redistributionDelay") long redistributionDelay,
+                           @Parameter(desc = "do we send to the DLA when there is no where to route the message", name = "sendToDLAOnNoRoute") boolean sendToDLAOnNoRoute,
+                           @Parameter(desc = "the policy to use when the address is full", name = "addressFullMessagePolicy") String addressFullMessagePolicy,
+                           @Parameter(desc = "when a consumer falls below this threshold in terms of messages consumed per second it will be considered 'slow'", name = "slowConsumerThreshold") long slowConsumerThreshold,
+                           @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 jms queues to be created automatically", name = "autoCreateJmsQueues") boolean autoCreateJmsQueues,
+                           @Parameter(desc = "allow auto-created jms queues to be deleted automatically", name = "autoDeleteJmsQueues") boolean autoDeleteJmsQueues,
+                           @Parameter(desc = "allow jms topics to be created automatically", name = "autoCreateJmsTopics") boolean autoCreateJmsTopics,
+                           @Parameter(desc = "allow auto-created jms topics to be deleted automatically", name = "autoDeleteJmsTopics") boolean autoDeleteJmsTopics,
+                           @Parameter(desc = "allow queues to be created automatically", name = "autoCreateQueues") boolean autoCreateQueues,
+                           @Parameter(desc = "allow auto-created queues to be deleted automatically", name = "autoDeleteQueues") boolean autoDeleteQueues,
+                           @Parameter(desc = "allow topics to be created automatically", name = "autoCreateAddresses") boolean autoCreateAddresses,
+                           @Parameter(desc = "allow auto-created topics to be deleted automatically", name = "autoDeleteAddresses") boolean autoDeleteAddresses) throws Exception;
 
    void removeAddressSettings(String addressMatch) throws Exception;
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ObjectNameBuilder.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ObjectNameBuilder.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ObjectNameBuilder.java
index 019996a..3bbd456 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ObjectNameBuilder.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/ObjectNameBuilder.java
@@ -165,7 +165,7 @@ public final class ObjectNameBuilder {
     * Returns the ObjectName used by JMSQueueControl.
     */
    public ObjectName getJMSQueueObjectName(final String name) throws Exception {
-      return createObjectName("Queue", name);
+      return getQueueObjectName(SimpleString.toSimpleString(name), SimpleString.toSimpleString(name));
    }
 
    /**

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
index 16311b0..145ca99 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientSessionImpl.java
@@ -237,14 +237,14 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
    @Override
    public void createQueue(final SimpleString address, final SimpleString queueName) throws ActiveMQException {
-      internalCreateQueue(address, queueName, null, false, false);
+      internalCreateQueue(address, queueName, null, false, false, false);
    }
 
    @Override
    public void createQueue(final SimpleString address,
                            final SimpleString queueName,
                            final boolean durable) throws ActiveMQException {
-      internalCreateQueue(address, queueName, null, durable, false);
+      internalCreateQueue(address, queueName, null, durable, false, false);
    }
 
    @Override
@@ -295,7 +295,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                            final SimpleString queueName,
                            final SimpleString filterString,
                            final boolean durable) throws ActiveMQException {
-      internalCreateQueue(address, queueName, filterString, durable, false);
+      internalCreateQueue(address, queueName, filterString, durable, false, false);
    }
 
    @Override
@@ -307,27 +307,45 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
    }
 
    @Override
+   public void createQueue(final SimpleString address,
+                           final SimpleString queueName,
+                           final SimpleString filterString,
+                           final boolean durable,
+                           final boolean autoCreated) throws ActiveMQException {
+      internalCreateQueue(address, queueName, filterString, durable, false, autoCreated);
+   }
+
+   @Override
+   public void createQueue(final String address,
+                           final String queueName,
+                           final String filterString,
+                           final boolean durable,
+                           final boolean autoCreated) throws ActiveMQException {
+      createQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filterString), durable, autoCreated);
+   }
+
+   @Override
    public void createTemporaryQueue(final SimpleString address, final SimpleString queueName) throws ActiveMQException {
-      internalCreateQueue(address, queueName, null, false, true);
+      internalCreateQueue(address, queueName, null, false, true, false);
    }
 
    @Override
    public void createTemporaryQueue(final String address, final String queueName) throws ActiveMQException {
-      internalCreateQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), null, false, true);
+      internalCreateQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), null, false, true, false);
    }
 
    @Override
    public void createTemporaryQueue(final SimpleString address,
                                     final SimpleString queueName,
                                     final SimpleString filter) throws ActiveMQException {
-      internalCreateQueue(address, queueName, filter, false, true);
+      internalCreateQueue(address, queueName, filter, false, true, false);
    }
 
    @Override
    public void createTemporaryQueue(final String address,
                                     final String queueName,
                                     final String filter) throws ActiveMQException {
-      internalCreateQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filter), false, true);
+      internalCreateQueue(SimpleString.toSimpleString(address), SimpleString.toSimpleString(queueName), SimpleString.toSimpleString(filter), false, true, false);
    }
 
    @Override
@@ -1551,7 +1569,8 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
                                     final SimpleString queueName,
                                     final SimpleString filterString,
                                     final boolean durable,
-                                    final boolean temp) throws ActiveMQException {
+                                    final boolean temp,
+                                    final boolean autoCreated) throws ActiveMQException {
       checkClosed();
 
       if (durable && temp) {
@@ -1560,7 +1579,7 @@ public final class ClientSessionImpl implements ClientSessionInternal, FailureLi
 
       startCall();
       try {
-         sessionContext.createQueue(address, queueName, filterString, durable, temp);
+         sessionContext.createQueue(address, queueName, filterString, durable, temp, autoCreated);
       } finally {
          endCall();
       }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
index 919da19..cbbe2b7 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/ActiveMQSessionContext.java
@@ -52,6 +52,7 @@ import org.apache.activemq.artemis.core.protocol.core.Packet;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.ActiveMQExceptionMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateAddressMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateQueueMessage;
+import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateQueueMessage_V2;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateSessionMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateSharedQueueMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.DisconnectConsumerMessage;
@@ -594,8 +595,9 @@ public class ActiveMQSessionContext extends SessionContext {
                            SimpleString queueName,
                            SimpleString filterString,
                            boolean durable,
-                           boolean temp) throws ActiveMQException {
-      CreateQueueMessage request = new CreateQueueMessage(address, queueName, filterString, durable, temp, true);
+                           boolean temp,
+                           boolean autoCreated) throws ActiveMQException {
+      CreateQueueMessage request = new CreateQueueMessage_V2(address, queueName, filterString, durable, temp, autoCreated, true);
       sessionChannel.sendBlocking(request, PacketImpl.NULL_RESPONSE);
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketDecoder.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketDecoder.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketDecoder.java
index 834822c..de1edbc 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketDecoder.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketDecoder.java
@@ -29,6 +29,7 @@ import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.ClusterTop
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.ClusterTopologyChangeMessage_V3;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateAddressMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateQueueMessage;
+import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateQueueMessage_V2;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateSessionMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateSessionResponseMessage;
 import org.apache.activemq.artemis.core.protocol.core.impl.wireformat.CreateSharedQueueMessage;
@@ -91,6 +92,7 @@ import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CRE
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CREATESESSION_RESP;
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CREATE_ADDRESS;
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CREATE_QUEUE;
+import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CREATE_QUEUE_V2;
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.CREATE_SHARED_QUEUE;
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.DELETE_QUEUE;
 import static org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl.DISCONNECT;
@@ -245,6 +247,10 @@ public abstract class PacketDecoder implements Serializable {
             packet = new CreateQueueMessage();
             break;
          }
+         case CREATE_QUEUE_V2: {
+            packet = new CreateQueueMessage_V2();
+            break;
+         }
          case CREATE_SHARED_QUEUE: {
             packet = new CreateSharedQueueMessage();
             break;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
index e07d9b5..abc1eef 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/PacketImpl.java
@@ -251,6 +251,8 @@ public class PacketImpl implements Packet {
 
    public static final byte CREATE_ADDRESS = -11;
 
+   public static final byte CREATE_QUEUE_V2 = -12;
+
    // Static --------------------------------------------------------
 
    public PacketImpl(final byte type) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage.java
index e837d55..2ebf147 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage.java
@@ -22,17 +22,17 @@ import org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl;
 
 public class CreateQueueMessage extends PacketImpl {
 
-   private SimpleString address;
+   protected SimpleString address;
 
-   private SimpleString queueName;
+   protected SimpleString queueName;
 
-   private SimpleString filterString;
+   protected SimpleString filterString;
 
-   private boolean durable;
+   protected boolean durable;
 
-   private boolean temporary;
+   protected boolean temporary;
 
-   private boolean requiresResponse;
+   protected boolean requiresResponse;
 
    public CreateQueueMessage(final SimpleString address,
                              final SimpleString queueName,
@@ -55,16 +55,28 @@ public class CreateQueueMessage extends PacketImpl {
    }
 
    // Public --------------------------------------------------------
+   /**
+    * @param createQueueMessageV2
+    */
+   public CreateQueueMessage(byte createQueueMessageV2) {
+      super(createQueueMessageV2);
+   }
 
    @Override
    public String toString() {
       StringBuffer buff = new StringBuffer(getParentString());
+      buff.append("]");
+      return buff.toString();
+   }
+
+   @Override
+   public String getParentString() {
+      StringBuffer buff = new StringBuffer(super.getParentString());
       buff.append(", address=" + address);
       buff.append(", queueName=" + queueName);
       buff.append(", filterString=" + filterString);
       buff.append(", durable=" + durable);
       buff.append(", temporary=" + temporary);
-      buff.append("]");
       return buff.toString();
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage_V2.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage_V2.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage_V2.java
new file mode 100644
index 0000000..13a4a58
--- /dev/null
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/protocol/core/impl/wireformat/CreateQueueMessage_V2.java
@@ -0,0 +1,99 @@
+/*
+ * 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.core.protocol.core.impl.wireformat;
+
+import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
+import org.apache.activemq.artemis.api.core.SimpleString;
+
+public class CreateQueueMessage_V2 extends CreateQueueMessage {
+
+   private boolean autoCreated;
+
+   public CreateQueueMessage_V2(final SimpleString address,
+                                final SimpleString queueName,
+                                final SimpleString filterString,
+                                final boolean durable,
+                                final boolean temporary,
+                                final boolean autoCreated,
+                                final boolean requiresResponse) {
+      this();
+
+      this.address = address;
+      this.queueName = queueName;
+      this.filterString = filterString;
+      this.durable = durable;
+      this.temporary = temporary;
+      this.autoCreated = autoCreated;
+      this.requiresResponse = requiresResponse;
+   }
+
+   public CreateQueueMessage_V2() {
+      super(CREATE_QUEUE_V2);
+   }
+
+   // Public --------------------------------------------------------
+
+   @Override
+   public String toString() {
+      StringBuffer buff = new StringBuffer(super.getParentString());
+      buff.append(", autoCreated=" + autoCreated);
+      buff.append("]");
+      return buff.toString();
+   }
+
+   public boolean isAutoCreated() {
+      return autoCreated;
+   }
+
+   public void setAutoCreated(boolean autoCreated) {
+      this.autoCreated = autoCreated;
+   }
+
+   @Override
+   public void encodeRest(final ActiveMQBuffer buffer) {
+      super.encodeRest(buffer);
+      buffer.writeBoolean(autoCreated);
+   }
+
+   @Override
+   public void decodeRest(final ActiveMQBuffer buffer) {
+      super.decodeRest(buffer);
+      autoCreated = buffer.readBoolean();
+   }
+
+   @Override
+   public int hashCode() {
+      final int prime = 31;
+      int result = super.hashCode();
+      result = prime * result + (autoCreated ? 1231 : 1237);
+      return result;
+   }
+
+   @Override
+   public boolean equals(Object obj) {
+      if (this == obj)
+         return true;
+      if (!super.equals(obj))
+         return false;
+      if (!(obj instanceof CreateQueueMessage_V2))
+         return false;
+      CreateQueueMessage_V2 other = (CreateQueueMessage_V2) obj;
+      if (autoCreated != other.autoCreated)
+         return false;
+      return true;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java
index 2792d52..a3b4c21 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java
@@ -36,6 +36,8 @@ public class Role implements Serializable {
 
    private final boolean createAddress;
 
+   private final boolean deleteAddress;
+
    private final boolean createDurableQueue;
 
    private final boolean deleteDurableQueue;
@@ -49,7 +51,7 @@ public class Role implements Serializable {
    private final boolean browse;
 
    public JsonObject toJson() {
-      return JsonLoader.createObjectBuilder().add("name", name).add("send", send).add("consume", consume).add("createDurableQueue", createDurableQueue).add("deleteDurableQueue", deleteDurableQueue).add("createNonDurableQueue", createNonDurableQueue).add("deleteNonDurableQueue", deleteNonDurableQueue).add("manage", manage).add("browse", browse).add("createAddress", createAddress).build();
+      return JsonLoader.createObjectBuilder().add("name", name).add("send", send).add("consume", consume).add("createDurableQueue", createDurableQueue).add("deleteDurableQueue", deleteDurableQueue).add("createNonDurableQueue", createNonDurableQueue).add("deleteNonDurableQueue", deleteNonDurableQueue).add("manage", manage).add("browse", browse).add("createAddress", createAddress).add("deleteAddress", deleteAddress).build();
    }
 
    /**
@@ -87,8 +89,8 @@ public class Role implements Serializable {
                final boolean manage,
                final boolean browse) {
       // This constructor exists for version compatibility on the API. If either createDurableQueue or createNonDurableQueue
-      // is true then createAddress will be true.
-      this(name, send, consume, createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue, manage, browse, createDurableQueue || createNonDurableQueue);
+      // is true then createAddress will be true. If either deleteDurableQueue or deleteNonDurableQueue is true then deleteAddress will be true.
+      this(name, send, consume, createDurableQueue, deleteDurableQueue, createNonDurableQueue, deleteNonDurableQueue, manage, browse, createDurableQueue || createNonDurableQueue, deleteDurableQueue || deleteNonDurableQueue);
    }
 
    public Role(final String name,
@@ -100,7 +102,8 @@ public class Role implements Serializable {
                final boolean deleteNonDurableQueue,
                final boolean manage,
                final boolean browse,
-               final boolean createAddress) {
+               final boolean createAddress,
+               final boolean deleteAddress) {
       if (name == null) {
          throw new NullPointerException("name is null");
       }
@@ -108,6 +111,7 @@ public class Role implements Serializable {
       this.send = send;
       this.consume = consume;
       this.createAddress = createAddress;
+      this.deleteAddress = deleteAddress;
       this.createDurableQueue = createDurableQueue;
       this.deleteDurableQueue = deleteDurableQueue;
       this.createNonDurableQueue = createNonDurableQueue;
@@ -132,6 +136,10 @@ public class Role implements Serializable {
       return createAddress;
    }
 
+   public boolean isDeleteAddress() {
+      return deleteAddress;
+   }
+
    public boolean isCreateDurableQueue() {
       return createDurableQueue;
    }
@@ -161,6 +169,9 @@ public class Role implements Serializable {
       if (createAddress) {
          stringReturn.append(" createAddress ");
       }
+      if (deleteAddress) {
+         stringReturn.append(" deleteAddress ");
+      }
       if (createDurableQueue) {
          stringReturn.append(" createDurableQueue ");
       }
@@ -202,6 +213,9 @@ public class Role implements Serializable {
       if (createAddress != role.createAddress) {
          return false;
       }
+      if (deleteAddress != role.deleteAddress) {
+         return false;
+      }
       if (createDurableQueue != role.createDurableQueue) {
          return false;
       }
@@ -237,6 +251,7 @@ public class Role implements Serializable {
       result = 31 * result + (send ? 1 : 0);
       result = 31 * result + (consume ? 1 : 0);
       result = 31 * result + (createAddress ? 1 : 0);
+      result = 31 * result + (deleteAddress ? 1 : 0);
       result = 31 * result + (createDurableQueue ? 1 : 0);
       result = 31 * result + (deleteDurableQueue ? 1 : 0);
       result = 31 * result + (createNonDurableQueue ? 1 : 0);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/SessionContext.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/SessionContext.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/SessionContext.java
index 16e8314..01f0b08 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/SessionContext.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/spi/core/remoting/SessionContext.java
@@ -172,7 +172,8 @@ public abstract class SessionContext {
                                     SimpleString queueName,
                                     SimpleString filterString,
                                     boolean durable,
-                                    boolean temp) throws ActiveMQException;
+                                    boolean temp,
+                                    boolean autoCreated) throws ActiveMQException;
 
    public abstract ClientSession.QueueQuery queueQuery(SimpleString queueName) throws ActiveMQException;
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SecurityFormatter.java
----------------------------------------------------------------------
diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SecurityFormatter.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SecurityFormatter.java
index 7e9ff32..08c414d 100644
--- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SecurityFormatter.java
+++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SecurityFormatter.java
@@ -33,7 +33,8 @@ public class SecurityFormatter {
                                           String deleteNonDurableQueueRoles,
                                           String manageRoles,
                                           String browseRoles,
-                                          String createAddressRoles) {
+                                          String createAddressRoles,
+                                          String deleteAddressRoles) {
       List<String> createDurableQueue = toList(createDurableQueueRoles);
       List<String> deleteDurableQueue = toList(deleteDurableQueueRoles);
       List<String> createNonDurableQueue = toList(createNonDurableQueueRoles);
@@ -43,6 +44,7 @@ public class SecurityFormatter {
       List<String> manage = toList(manageRoles);
       List<String> browse = toList(browseRoles);
       List<String> createAddress = toList(createAddressRoles);
+      List<String> deleteAddress = toList(deleteAddressRoles);
 
       Set<String> allRoles = new HashSet<>();
       allRoles.addAll(createDurableQueue);
@@ -54,10 +56,11 @@ public class SecurityFormatter {
       allRoles.addAll(manage);
       allRoles.addAll(browse);
       allRoles.addAll(createAddress);
+      allRoles.addAll(deleteAddress);
 
       Set<Role> roles = new HashSet<>(allRoles.size());
       for (String role : allRoles) {
-         roles.add(new Role(role, send.contains(role), consume.contains(role), createDurableQueue.contains(role), deleteDurableQueue.contains(role), createNonDurableQueue.contains(role), deleteNonDurableQueue.contains(role), manageRoles.contains(role), browse.contains(role), createAddressRoles.contains(role)));
+         roles.add(new Role(role, send.contains(role), consume.contains(role), createDurableQueue.contains(role), deleteDurableQueue.contains(role), createNonDurableQueue.contains(role), deleteNonDurableQueue.contains(role), manageRoles.contains(role), browse.contains(role), createAddressRoles.contains(role), deleteAddressRoles.contains(role)));
       }
       return roles;
    }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-distribution/src/test/scripts/validate-instalation.sh
----------------------------------------------------------------------
diff --git a/artemis-distribution/src/test/scripts/validate-instalation.sh b/artemis-distribution/src/test/scripts/validate-instalation.sh
index 85773a4..5837739 100755
--- a/artemis-distribution/src/test/scripts/validate-instalation.sh
+++ b/artemis-distribution/src/test/scripts/validate-instalation.sh
@@ -49,7 +49,7 @@ pwd
 sleep 5
 
 ./artemis producer
-./artemis consumer
+./artemis consumer --receive-timeout 10000 --break-on-null
 
 ./artemis stop
 
@@ -64,7 +64,7 @@ sleep 5
 sleep 5
 
 ./artemis producer
-./artemis consumer
+./artemis consumer --receive-timeout 10000 --break-on-null
 
 ./artemis-service stop
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-features/src/main/resources/artemis.xml
----------------------------------------------------------------------
diff --git a/artemis-features/src/main/resources/artemis.xml b/artemis-features/src/main/resources/artemis.xml
index fc1cdcc..7a51dc2 100644
--- a/artemis-features/src/main/resources/artemis.xml
+++ b/artemis-features/src/main/resources/artemis.xml
@@ -80,6 +80,8 @@ under the License.
             <permission type="deleteNonDurableQueue" roles="manager"/>
             <permission type="createDurableQueue" roles="manager"/>
             <permission type="deleteDurableQueue" roles="manager"/>
+            <permission type="createAddress" roles="manager"/>
+            <permission type="deleteAddress" roles="manager"/>
             <permission type="consume" roles="manager"/>
             <permission type="send" roles="manager"/>
             <!-- we need this otherwise ./artemis data imp wouldn't work -->
@@ -97,7 +99,7 @@ under the License.
             <max-size-bytes>-1</max-size-bytes>
             <message-counter-history-day-limit>10</message-counter-history-day-limit>
             <address-full-policy>PAGE</address-full-policy>
-            <auto-create-jms-queues>true</auto-create-jms-queues>
+            <auto-create-queues>true</auto-create-queues>
          </address-setting>
       </address-settings>
    </core>

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
----------------------------------------------------------------------
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
index 5cbd40f..3d3fa66 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQMessageProducer.java
@@ -410,7 +410,7 @@ public class ActiveMQMessageProducer implements MessageProducer, QueueSender, To
                         // TODO is it right to use the address for the queue name here?
                         clientSession.createTemporaryQueue(address, address);
                      } else {
-                        clientSession.createQueue(address, address, null, true);
+                        clientSession.createQueue(address, address, null, true, true);
                      }
                   } else if (!destination.isQueue() && query.isAutoCreateJmsTopics()) {
                      clientSession.createAddress(address, true, true);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
----------------------------------------------------------------------
diff --git a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
index f514dba..7fc0fb2 100644
--- a/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
+++ b/artemis-jms-client/src/main/java/org/apache/activemq/artemis/jms/client/ActiveMQSession.java
@@ -301,10 +301,9 @@ public class ActiveMQSession implements QueueSession, TopicSession {
 
             if (!response.isExists()) {
                if (jbd.isQueue() && response.isAutoCreateJmsQueues()) {
-                  // TODO create queue here in such a way that it is deleted when consumerCount == 0
                   // perhaps just relying on the broker to do it is simplest (i.e. deleteOnNoConsumers)
                   session.createAddress(jbd.getSimpleAddress(), false, true);
-                  session.createQueue(jbd.getSimpleAddress(), jbd.getSimpleAddress(), null, true);
+                  session.createQueue(jbd.getSimpleAddress(), jbd.getSimpleAddress(), null, true, true);
                } else if (!jbd.isQueue() && response.isAutoCreateJmsTopics()) {
                   session.createAddress(jbd.getSimpleAddress(), true, true);
                } else {
@@ -647,9 +646,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
              */
             if (!response.isExists() || !response.getQueueNames().contains(dest.getSimpleAddress())) {
                if (response.isAutoCreateJmsQueues()) {
-                  // TODO create queue here in such a way that it is deleted when consumerCount == 0
-                  // perhaps just relying on the broker to do it is simplest (i.e. deleteOnNoConsumers)
-                  session.createQueue(dest.getSimpleAddress(), dest.getSimpleAddress(), true);
+                  session.createQueue(dest.getSimpleAddress(), dest.getSimpleAddress(), null, true, true);
                } else {
                   throw new InvalidDestinationException("Destination " + dest.getName() + " does not exist");
                }
@@ -797,7 +794,7 @@ public class ActiveMQSession implements QueueSession, TopicSession {
          AddressQuery response = session.addressQuery(new SimpleString(activeMQDestination.getAddress()));
          if (!response.isExists()) {
             if (response.isAutoCreateJmsQueues()) {
-               session.createQueue(activeMQDestination.getSimpleAddress(), activeMQDestination.getSimpleAddress(), true);
+               session.createQueue(activeMQDestination.getSimpleAddress(), activeMQDestination.getSimpleAddress(), null, true, true);
             } else {
                throw new InvalidDestinationException("Destination " + activeMQDestination.getName() + " does not exist");
             }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 25ad349..74fde63 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -1637,9 +1637,9 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
 //         long consumerCount = queue.getConsumerCount();
 //         long messageCount = queue.getMessageCount();
 //
-//         if (address.toString().startsWith(ActiveMQDestination.JMS_QUEUE_ADDRESS_PREFIX) && settings.getAutoDeleteJmsQueues() && queue.getMessageCount() == 0) {
+//         if (address.toString().startsWith(ActiveMQDestination.JMS_QUEUE_ADDRESS_PREFIX) && settings.isAutoDeleteJmsQueues() && queue.getMessageCount() == 0) {
 //            if (ActiveMQJMSServerLogger.LOGGER.isDebugEnabled()) {
-//               ActiveMQJMSServerLogger.LOGGER.debug("deleting auto-created queue \"" + queueName + ".\" consumerCount = " + consumerCount + "; messageCount = " + messageCount + "; getAutoDeleteJmsQueues = " + settings.getAutoDeleteJmsQueues());
+//               ActiveMQJMSServerLogger.LOGGER.debug("deleting auto-created queue \"" + queueName + ".\" consumerCount = " + consumerCount + "; messageCount = " + messageCount + "; isAutoDeleteJmsQueues = " + settings.isAutoDeleteJmsQueues());
 //            }
 //
 //            return destroyQueue(queueName.toString().substring(ActiveMQDestination.JMS_QUEUE_ADDRESS_PREFIX.length()), false);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireConnection.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 e823d0e..1acf48a 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
@@ -722,7 +722,6 @@ public class OpenWireConnection extends AbstractRemotingConnection implements Se
                server.getSecurityStore().check(qName, checkType, this);
                server.checkQueueCreationLimit(getUsername());
                server.createQueue(qName, qName, null, connInfo == null ? null : SimpleString.toSimpleString(connInfo.getUserName()), true, false);
-
             }
          }
       }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
index 35fd733..b2a2068 100644
--- a/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
+++ b/artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/amq/AMQSession.java
@@ -168,7 +168,7 @@ public class AMQSession implements SessionCallback {
          BindingQueryResult bindingQuery = server.bindingQuery(queueName);
          QueueQueryResult queueBinding = server.queueQuery(queueName);
 
-         boolean isAutoCreate = bindingQuery.isExists() ? bindingQuery.isAutoCreateJmsQueues() : true;
+         boolean isAutoCreate = bindingQuery.isExists() ?  true : bindingQuery.isAutoCreateJmsQueues();
 
          if (!queueBinding.isExists()) {
             if (isAutoCreate) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
----------------------------------------------------------------------
diff --git a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
index 4cb8fe9..3b0991d 100644
--- a/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
+++ b/artemis-protocols/artemis-stomp-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/stomp/StompConnection.java
@@ -39,8 +39,10 @@ import org.apache.activemq.artemis.core.remoting.FailureListener;
 import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
 import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
 import org.apache.activemq.artemis.core.server.ServerMessage;
+import org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 import org.apache.activemq.artemis.core.server.impl.ServerMessageImpl;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.spi.core.remoting.Acceptor;
 import org.apache.activemq.artemis.spi.core.remoting.Connection;
@@ -251,6 +253,7 @@ public final class StompConnection implements RemotingConnection {
       return res;
    }
 
+   // TODO this should take a type - send or receive so it knows whether to check the address or the queue
    public void checkDestination(String destination) throws ActiveMQStompException {
       if (!manager.destinationExists(destination)) {
          throw BUNDLE.destinationNotExist(destination).setHandler(frameHandler);
@@ -259,17 +262,24 @@ public final class StompConnection implements RemotingConnection {
 
    public boolean autoCreateDestinationIfPossible(String queue, AddressInfo.RoutingType routingType) throws ActiveMQStompException {
       boolean result = false;
+      ServerSession session = getSession().getSession();
 
       try {
          if (manager.getServer().getAddressInfo(SimpleString.toSimpleString(queue)) == null) {
-            // TODO check here to see if auto-creation is enabled
-            if (routingType.equals(AddressInfo.RoutingType.MULTICAST)) {
-               manager.getServer().createOrUpdateAddressInfo(new AddressInfo(SimpleString.toSimpleString(queue)).setAutoCreated(true));
+            AddressSettings addressSettings = manager.getServer().getAddressSettingsRepository().getMatch(queue);
+            if (routingType != null && routingType.equals(AddressInfo.RoutingType.MULTICAST) && addressSettings.isAutoCreateAddresses()) {
+               session.createAddress(SimpleString.toSimpleString(queue), true, true);
+               result = true;
             } else {
-               manager.getServer().createOrUpdateAddressInfo(new AddressInfo(SimpleString.toSimpleString(queue)).setRoutingType(AddressInfo.RoutingType.ANYCAST).setAutoCreated(true));
-               manager.getServer().createQueue(SimpleString.toSimpleString(queue), SimpleString.toSimpleString(queue), null, null, true, false, true);
+               if (addressSettings.isAutoCreateAddresses()) {
+                  session.createAddress(SimpleString.toSimpleString(queue), false, true);
+                  result = true;
+               }
+               if (addressSettings.isAutoCreateQueues()) {
+                  session.createQueue(SimpleString.toSimpleString(queue), SimpleString.toSimpleString(queue), null, false, true, null, null, true);
+                  result = true;
+               }
             }
-            result = true;
          }
       } catch (ActiveMQQueueExistsException e) {
          // ignore
@@ -555,6 +565,10 @@ public final class StompConnection implements RemotingConnection {
       return manager.createServerMessage();
    }
 
+   public StompSession getSession() throws ActiveMQStompException {
+      return getSession(null);
+   }
+
    public StompSession getSession(String txID) throws ActiveMQStompException {
       StompSession session = null;
       try {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/74977493/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
index 349c1fd..ea42a40 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/deployers/impl/FileConfigurationParser.java
@@ -125,6 +125,10 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
 
    private static final String BROWSE_NAME = "browse";
 
+   private static final String CREATEADDRESS_NAME = "createAddress";
+
+   private static final String DELETEADDRESS_NAME = "deleteAddress";
+
    // Address parsing
 
    private static final String DEAD_LETTER_ADDRESS_NODE_NAME = "dead-letter-address";
@@ -171,6 +175,14 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
 
    private static final String AUTO_DELETE_JMS_TOPICS = "auto-delete-jms-topics";
 
+   private static final String AUTO_CREATE_QUEUES = "auto-create-queues";
+
+   private static final String AUTO_DELETE_QUEUES = "auto-delete-queues";
+
+   private static final String AUTO_CREATE_ADDRESSES = "auto-create-addresses";
+
+   private static final String AUTO_DELETE_ADDRESSES = "auto-delete-addresses";
+
    private static final String MANAGEMENT_BROWSE_PAGE_SIZE = "management-browse-page-size";
 
    private static final String MAX_CONNECTIONS_NODE_NAME = "max-connections";
@@ -696,6 +708,8 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
       ArrayList<String> deleteNonDurableQueue = new ArrayList<>();
       ArrayList<String> manageRoles = new ArrayList<>();
       ArrayList<String> browseRoles = new ArrayList<>();
+      ArrayList<String> createAddressRoles = new ArrayList<>();
+      ArrayList<String> deleteAddressRoles = new ArrayList<>();
       ArrayList<String> allRoles = new ArrayList<>();
       NodeList children = node.getChildNodes();
       for (int i = 0; i < children.getLength(); i++) {
@@ -726,6 +740,10 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
                   manageRoles.add(role.trim());
                } else if (BROWSE_NAME.equals(type)) {
                   browseRoles.add(role.trim());
+               } else if (CREATEADDRESS_NAME.equals(type)) {
+                  createAddressRoles.add(role.trim());
+               } else if (DELETEADDRESS_NAME.equals(type)) {
+                  deleteAddressRoles.add(role.trim());
                } else {
                   ActiveMQServerLogger.LOGGER.rolePermissionConfigurationError(type);
                }
@@ -842,6 +860,14 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
             addressSettings.setAutoCreateJmsTopics(XMLUtil.parseBoolean(child));
          } else if (AUTO_DELETE_JMS_TOPICS.equalsIgnoreCase(name)) {
             addressSettings.setAutoDeleteJmsTopics(XMLUtil.parseBoolean(child));
+         } else if (AUTO_CREATE_QUEUES.equalsIgnoreCase(name)) {
+            addressSettings.setAutoCreateQueues(XMLUtil.parseBoolean(child));
+         } else if (AUTO_DELETE_QUEUES.equalsIgnoreCase(name)) {
+            addressSettings.setAutoDeleteQueues(XMLUtil.parseBoolean(child));
+         } else if (AUTO_CREATE_ADDRESSES.equalsIgnoreCase(name)) {
+            addressSettings.setAutoCreateAddresses(XMLUtil.parseBoolean(child));
+         } else if (AUTO_DELETE_ADDRESSES.equalsIgnoreCase(name)) {
+            addressSettings.setAutoDeleteAddresses(XMLUtil.parseBoolean(child));
          } else if (MANAGEMENT_BROWSE_PAGE_SIZE.equalsIgnoreCase(name)) {
             addressSettings.setManagementBrowsePageSize(XMLUtil.parseInt(child));
          }