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/09 19:49:32 UTC

[48/50] [abbrv] activemq-artemis git commit: ARTEMIS-878 Added/Modified CLI commands and tests

ARTEMIS-878 Added/Modified CLI commands and tests


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

Branch: refs/heads/master
Commit: 6ab133ab896874c2bbcdc0bbbe56b879764f25a4
Parents: 8f532cc
Author: Francesco Nigro <ni...@gmail.com>
Authored: Mon Dec 5 19:04:21 2016 +0100
Committer: Martyn Taylor <mt...@redhat.com>
Committed: Fri Dec 9 18:43:15 2016 +0000

----------------------------------------------------------------------
 .../apache/activemq/artemis/cli/Artemis.java    |  8 +-
 .../cli/commands/address/AddRoutingType.java    | 78 +++++++++++++++++
 .../cli/commands/address/CreateAddress.java     | 34 +-------
 .../cli/commands/address/DeleteAddress.java     |  2 +-
 .../cli/commands/address/RemoveRoutingType.java | 78 +++++++++++++++++
 .../cli/commands/address/ShowAddress.java       |  4 +-
 .../artemis/cli/commands/queue/CreateQueue.java | 13 ++-
 .../core/management/ActiveMQServerControl.java  | 15 +++-
 .../impl/ActiveMQServerControlImpl.java         | 48 ++++++++---
 .../artemis/core/postoffice/AddressManager.java |  4 +
 .../artemis/core/postoffice/PostOffice.java     |  5 ++
 .../core/postoffice/impl/PostOfficeImpl.java    | 34 ++++++++
 .../postoffice/impl/SimpleAddressManager.java   |  7 ++
 .../core/server/ActiveMQMessageBundle.java      |  3 +
 .../artemis/core/server/ActiveMQServer.java     | 20 +++++
 .../core/server/impl/ActiveMQServerImpl.java    | 13 +++
 .../integration/cli/AddressCommandTest.java     | 90 ++++++++++++++++++++
 .../tests/integration/cli/QueueCommandTest.java | 12 ++-
 .../ActiveMQServerControlUsingCoreTest.java     | 15 +++-
 .../core/server/impl/fakes/FakePostOffice.java  | 12 +++
 20 files changed, 443 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
index 94779fc..13e2f7c 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/Artemis.java
@@ -30,8 +30,12 @@ import org.apache.activemq.artemis.cli.commands.Kill;
 import org.apache.activemq.artemis.cli.commands.Mask;
 import org.apache.activemq.artemis.cli.commands.Run;
 import org.apache.activemq.artemis.cli.commands.Stop;
+import org.apache.activemq.artemis.cli.commands.address.AddRoutingType;
 import org.apache.activemq.artemis.cli.commands.address.CreateAddress;
 import org.apache.activemq.artemis.cli.commands.address.DeleteAddress;
+import org.apache.activemq.artemis.cli.commands.address.HelpAddress;
+import org.apache.activemq.artemis.cli.commands.address.RemoveRoutingType;
+import org.apache.activemq.artemis.cli.commands.address.ShowAddress;
 import org.apache.activemq.artemis.cli.commands.queue.CreateQueue;
 import org.apache.activemq.artemis.cli.commands.queue.DeleteQueue;
 import org.apache.activemq.artemis.cli.commands.queue.HelpQueue;
@@ -133,8 +137,8 @@ public class Artemis {
       builder.withGroup("queue").withDescription("Queue tools group (create|delete) (example ./artemis queue create)").
          withDefaultCommand(HelpQueue.class).withCommands(CreateQueue.class, DeleteQueue.class);
 
-      builder.withGroup("address").withDescription("Queue tools group (create|delete) (example ./artemis queue create)").
-         withDefaultCommand(HelpQueue.class).withCommands(CreateAddress.class, DeleteAddress.class);
+      builder.withGroup("address").withDescription("Address tools group (create|delete|addRoutingType|removeRoutingType|show) (example ./artemis address create)").
+         withDefaultCommand(HelpAddress.class).withCommands(CreateAddress.class, DeleteAddress.class, AddRoutingType.class, RemoveRoutingType.class, ShowAddress.class);
 
       if (instance != null) {
          builder.withGroup("data").withDescription("data tools group (print|exp|imp|exp|encode|decode|compact) (example ./artemis data print)").

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/AddRoutingType.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/AddRoutingType.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/AddRoutingType.java
new file mode 100644
index 0000000..fd79620
--- /dev/null
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/AddRoutingType.java
@@ -0,0 +1,78 @@
+/**
+ * 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.cli.commands.address;
+
+import io.airlift.airline.Command;
+import io.airlift.airline.Option;
+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;
+
+@Command(name = "addRoutingType", description = "add the provided routing types to an address")
+public class AddRoutingType extends AbstractAction {
+
+   @Option(name = "--name", description = "The name of this address", required = true)
+   String name;
+
+   @Option(name = "--routingType", description = "The routing types to be added to this address, options are 'anycast' or 'multicast'", required = true)
+   String routingType;
+
+   @Override
+   public Object execute(ActionContext context) throws Exception {
+      super.execute(context);
+      addRoutingType(context);
+      return null;
+   }
+
+   private void addRoutingType(final ActionContext context) throws Exception {
+      performCoreManagement(new AbstractAction.ManagementCallback<ClientMessage>() {
+         @Override
+         public void setUpInvocation(ClientMessage message) throws Exception {
+            ManagementHelper.putOperationInvocation(message, "broker", "addRoutingType", name, routingType);
+         }
+
+         @Override
+         public void requestSuccessful(ClientMessage reply) throws Exception {
+            context.out.println("Address " + name + " updated successfully.");
+         }
+
+         @Override
+         public void requestFailed(ClientMessage reply) throws Exception {
+            String errMsg = (String) ManagementHelper.getResult(reply, String.class);
+            context.err.println("Failed to update address " + name + ". Reason: " + errMsg);
+         }
+      });
+   }
+
+   public String getName() {
+      return name;
+   }
+
+   public void setName(String name) {
+      this.name = name;
+   }
+
+   public String getRoutingType() {
+      return routingType;
+   }
+
+   public void setRoutingType(String routingType) {
+      this.routingType = routingType;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/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 42f721a..2795238 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
@@ -19,11 +19,11 @@ package org.apache.activemq.artemis.cli.commands.address;
 
 import io.airlift.airline.Command;
 import io.airlift.airline.Option;
+import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
 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.RoutingType;
 
 @Command(name = "create", description = "create an address")
 public class CreateAddress extends AbstractAction {
@@ -32,13 +32,7 @@ public class CreateAddress extends AbstractAction {
    String name;
 
    @Option(name = "--routingTypes", description = "The routing types supported by this address, options are 'anycast' or 'multicast', enter comma separated list, defaults to 'multicast' only")
-   String[] routingTypes = new String[] {RoutingType.MULTICAST.toString()};
-
-   @Option(name = "--defaultMaxConsumers", description = "Sets the default max consumers for any queues created under this address, default = -1 (no limit)")
-   int defaultMaxConsumers = -1;
-
-   @Option(name = "--defaultDeleteOnNoConsumers", description = "Sets the default delete on no consumers for any queues created under this address, default = false")
-   boolean defaultDeleteOnNoConsumers = false;
+   String routingTypes = ActiveMQDefaultConfiguration.getDefaultRoutingType().name();
 
    @Override
    public Object execute(ActionContext context) throws Exception {
@@ -75,32 +69,12 @@ public class CreateAddress extends AbstractAction {
       return name;
    }
 
-   public String[] getRoutingTypes() {
+   public String getRoutingTypes() {
       return routingTypes;
    }
 
    public void setRoutingTypes(String routingTypes) {
-      String[] split = routingTypes.split(",");
-      this.routingTypes = new String[split.length];
-      for (int i = 0; i < split.length; i++) {
-         RoutingType.valueOf(split[i].trim());
-         this.routingTypes[i] = split[i].trim();
-      }
+      this.routingTypes = routingTypes;
    }
 
-   public int getDefaultMaxConsumers() {
-      return defaultMaxConsumers;
-   }
-
-   public void setDefaultMaxConsumers(int defaultMaxConsumers) {
-      this.defaultMaxConsumers = defaultMaxConsumers;
-   }
-
-   public boolean getDefaultDeleteOnNoConsumers() {
-      return defaultDeleteOnNoConsumers;
-   }
-
-   public void setDefaultDeleteOnNoConsumers(boolean defaultDeleteOnNoConsumers) {
-      this.defaultDeleteOnNoConsumers = defaultDeleteOnNoConsumers;
-   }
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/DeleteAddress.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/DeleteAddress.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/DeleteAddress.java
index 36c9224..c63d4f9 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/DeleteAddress.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/DeleteAddress.java
@@ -24,7 +24,7 @@ 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;
 
-@Command(name = "delete", description = "delete a queue")
+@Command(name = "delete", description = "delete an address")
 public class DeleteAddress extends AbstractAction {
 
    @Option(name = "--name", description = "The name of this address")

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/RemoveRoutingType.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/RemoveRoutingType.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/RemoveRoutingType.java
new file mode 100644
index 0000000..637de6b
--- /dev/null
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/address/RemoveRoutingType.java
@@ -0,0 +1,78 @@
+/**
+ * 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.cli.commands.address;
+
+import io.airlift.airline.Command;
+import io.airlift.airline.Option;
+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;
+
+@Command(name = "removeRoutingType", description = "remove the provided routing types from an address")
+public class RemoveRoutingType extends AbstractAction {
+
+   @Option(name = "--name", description = "The name of the address", required = true)
+   String name;
+
+   @Option(name = "--routingType", description = "The routing types to be removed from this address, options are 'anycast' or 'multicast'", required = true)
+   String routingType;
+
+   @Override
+   public Object execute(ActionContext context) throws Exception {
+      super.execute(context);
+      removeRoutingType(context);
+      return null;
+   }
+
+   private void removeRoutingType(final ActionContext context) throws Exception {
+      performCoreManagement(new AbstractAction.ManagementCallback<ClientMessage>() {
+         @Override
+         public void setUpInvocation(ClientMessage message) throws Exception {
+            ManagementHelper.putOperationInvocation(message, "broker", "removeRoutingType", name, routingType);
+         }
+
+         @Override
+         public void requestSuccessful(ClientMessage reply) throws Exception {
+            context.out.println("Address " + name + " updated successfully.");
+         }
+
+         @Override
+         public void requestFailed(ClientMessage reply) throws Exception {
+            String errMsg = (String) ManagementHelper.getResult(reply, String.class);
+            context.err.println("Failed to update address " + name + ". Reason: " + errMsg);
+         }
+      });
+   }
+
+   public String getName() {
+      return name;
+   }
+
+   public void setName(String name) {
+      this.name = name;
+   }
+
+   public String getRoutingType() {
+      return routingType;
+   }
+
+   public void setRoutingType(String routingType) {
+      this.routingType = routingType;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/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 013b504..a736cf2 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
@@ -24,7 +24,7 @@ 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;
 
-@Command(name = "show", description = "delete a queue")
+@Command(name = "show", description = "Get the selected address")
 public class ShowAddress extends AbstractAction {
 
    @Option(name = "--name", description = "The name of this address")
@@ -53,7 +53,7 @@ public class ShowAddress extends AbstractAction {
 
          @Override
          public void requestSuccessful(ClientMessage reply) throws Exception {
-            String result = (String) ManagementHelper.getResult(reply, String.class);
+            final String result = (String) ManagementHelper.getResult(reply, String.class);
             context.out.println(result);
          }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/CreateQueue.java
----------------------------------------------------------------------
diff --git a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/CreateQueue.java b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/CreateQueue.java
index 76cea6e..c2497c9 100644
--- a/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/CreateQueue.java
+++ b/artemis-cli/src/main/java/org/apache/activemq/artemis/cli/commands/queue/CreateQueue.java
@@ -48,6 +48,9 @@ public class CreateQueue extends AbstractAction {
    @Option(name = "--autoCreateAddress", description = "Auto create the address (if it doesn't exist) with default values")
    boolean autoCreateAddress = false;
 
+   @Option(name = "--routingType", description = "The routing type supported by this queue, options are 'anycast' or 'multicast'", required = true)
+   String routingType;
+
    @Override
    public Object execute(ActionContext context) throws Exception {
       super.execute(context);
@@ -67,7 +70,7 @@ public class CreateQueue extends AbstractAction {
          @Override
          public void setUpInvocation(ClientMessage message) throws Exception {
             String address = getAddress();
-            ManagementHelper.putOperationInvocation(message, "broker", "createQueue", address, getName(), filter, durable, maxConsumers, deleteOnNoConsumers, autoCreateAddress);
+            ManagementHelper.putOperationInvocation(message, "broker", "createQueue", address, routingType, getName(), filter, durable, maxConsumers, deleteOnNoConsumers, autoCreateAddress);
          }
 
          @Override
@@ -114,4 +117,12 @@ public class CreateQueue extends AbstractAction {
 
       return name;
    }
+
+   public void setRoutingType(String routingType) {
+      this.routingType = routingType;
+   }
+
+   public String getRoutingType() {
+      return routingType;
+   }
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/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 abd8e9e..bec85ce 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
@@ -434,9 +434,17 @@ public interface ActiveMQServerControl {
 
    // Operations ----------------------------------------------------
 
-   @Operation(desc = "delete an address", impact = MBeanOperationInfo.ACTION)
+   @Operation(desc = "create an address", impact = MBeanOperationInfo.ACTION)
    void createAddress(@Parameter(name = "name", desc = "The name of the address") String name,
-                      @Parameter(name = "routingType", desc = "Comma separated list of Routing Typles (anycast/multicast)") String routingTypes) throws Exception;
+                      @Parameter(name = "routingTypes", desc = "Comma separated list of Routing Typles (anycast/multicast)") String routingTypes) throws Exception;
+
+   @Operation(desc = "add the provided routing type to an address", impact = MBeanOperationInfo.ACTION)
+   void addRoutingType(@Parameter(name = "name", desc = "The name of the address") String name,
+                       @Parameter(name = "routingType", desc = "The routing types to be added to this address, options are 'anycast' or 'multicast'") String routingType) throws Exception;
+
+   @Operation(desc = "remove the provided routing type to an address", impact = MBeanOperationInfo.ACTION)
+   void removeRoutingType(@Parameter(name = "name", desc = "The name of the address") String name,
+                          @Parameter(name = "routingType", desc = "The routing types to be added to this address, options are 'anycast' or 'multicast'") String routingType) throws Exception;
 
    @Operation(desc = "delete an address", impact = MBeanOperationInfo.ACTION)
    void deleteAddress(@Parameter(name = "name", desc = "The name of the address") String name) throws Exception;
@@ -1038,9 +1046,10 @@ public interface ActiveMQServerControl {
    @Operation(desc = "List the Network Topology", impact = MBeanOperationInfo.INFO)
    String listNetworkTopology() throws Exception;
 
+   @Operation(desc = "Get the selected address", impact = MBeanOperationInfo.INFO)
    String getAddressInfo(String address) throws ActiveMQAddressDoesNotExistException;
 
    @Operation(desc = "Get a list of bindings associated with an address", impact = MBeanOperationInfo.INFO)
-   String[] listBindingsForAddress(String address) throws Exception;
+   String listBindingsForAddress(String address) throws Exception;
 }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
index 841aa84..a43f28d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/ActiveMQServerControlImpl.java
@@ -42,6 +42,7 @@ import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.stream.Collectors;
 
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
 import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
@@ -568,8 +569,8 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
       clearIO();
       try {
          Set<RoutingType> set = new HashSet<>();
-         for (Object routingType : toList(routingTypes)) {
-            set.add(RoutingType.valueOf(routingType.toString()));
+         for (String routingType : toList(routingTypes)) {
+            set.add(RoutingType.valueOf(routingType));
          }
          server.createAddressInfo(new AddressInfo(new SimpleString(name), set));
       } finally {
@@ -578,6 +579,32 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
    }
 
    @Override
+   public void addRoutingType(String name, String routingTypeName) throws Exception {
+      checkStarted();
+
+      clearIO();
+      try {
+         final RoutingType routingType = RoutingType.valueOf(routingTypeName);
+         server.addRoutingType(name, routingType);
+      } finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
+   public void removeRoutingType(String name, String routingTypeName) throws Exception {
+      checkStarted();
+
+      clearIO();
+      try {
+         final RoutingType routingType = RoutingType.valueOf(routingTypeName);
+         server.removeRoutingType(name, routingType);
+      } finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
    public void deleteAddress(String name) throws Exception {
       checkStarted();
 
@@ -838,7 +865,7 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
 
       clearIO();
       try {
-         AddressInfo addressInfo = server.getAddressInfo(SimpleString.toSimpleString(address));
+         final AddressInfo addressInfo = server.getAddressInfo(SimpleString.toSimpleString(address));
          if (addressInfo == null) {
             throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(SimpleString.toSimpleString(address));
          } else {
@@ -850,15 +877,16 @@ public class ActiveMQServerControlImpl extends AbstractControl implements Active
    }
 
    @Override
-   public String[] listBindingsForAddress(String address) throws Exception {
-      Bindings bindings = server.getPostOffice().getBindingsForAddress(new SimpleString(address));
-      List<String> result = new ArrayList<>(bindings.getBindings().size());
-
-      int i = 0;
-      for (Binding binding : bindings.getBindings()) {
+   public String listBindingsForAddress(String address) throws Exception {
+      checkStarted();
 
+      clearIO();
+      try {
+         final Bindings bindings = server.getPostOffice().getBindingsForAddress(new SimpleString(address));
+         return bindings.getBindings().stream().map(Binding::toManagementString).collect(Collectors.joining(","));
+      } finally {
+         blockOnIO();
       }
-      return (String[]) result.toArray();
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
index ada1d77..6ba205b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/AddressManager.java
@@ -18,6 +18,7 @@ package org.apache.activemq.artemis.core.postoffice;
 
 import java.util.Map;
 import java.util.Set;
+import java.util.function.BiFunction;
 
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.server.RoutingType;
@@ -59,6 +60,9 @@ public interface AddressManager {
 
    AddressInfo addAddressInfo(AddressInfo addressInfo);
 
+   AddressInfo updateAddressInfoIfPresent(SimpleString addressName,
+                                          BiFunction<? super SimpleString, ? super AddressInfo, ? extends AddressInfo> remappingFunction);
+
    AddressInfo addOrUpdateAddressInfo(AddressInfo addressInfo);
 
    AddressInfo removeAddressInfo(SimpleString address);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
index dc5f4b4..3c40475 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/PostOffice.java
@@ -20,6 +20,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
 import org.apache.activemq.artemis.api.core.Pair;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.server.ActiveMQComponent;
@@ -52,6 +53,10 @@ public interface PostOffice extends ActiveMQComponent {
 
    AddressInfo getAddressInfo(SimpleString address);
 
+   void addRoutingType(SimpleString addressName, RoutingType routingType) throws ActiveMQAddressDoesNotExistException;
+
+   void removeRoutingType(SimpleString addressName, RoutingType routingType) throws Exception;
+
    List<Queue> listQueuesForAddress(SimpleString address) throws Exception;
 
    void addBinding(Binding binding) throws Exception;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
index 16c3021..c7df757 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeImpl.java
@@ -32,6 +32,7 @@ import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
+import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
 import org.apache.activemq.artemis.api.core.ActiveMQAddressFullException;
 import org.apache.activemq.artemis.api.core.ActiveMQDuplicateIdException;
 import org.apache.activemq.artemis.api.core.ActiveMQNonExistentQueueException;
@@ -447,6 +448,39 @@ public class PostOfficeImpl implements PostOffice, NotificationListener, Binding
    }
 
    @Override
+   public void addRoutingType(SimpleString addressName, RoutingType routingType) throws ActiveMQAddressDoesNotExistException {
+      synchronized (addressLock) {
+         final AddressInfo updateAddressInfo = addressManager.updateAddressInfoIfPresent(addressName, (name, addressInfo) -> {
+            addressInfo.getRoutingTypes().add(routingType);
+            return addressInfo;
+         });
+         if (updateAddressInfo == null) {
+            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(addressName);
+         }
+      }
+   }
+
+   @Override
+   public void removeRoutingType(SimpleString addressName, RoutingType routingType) throws Exception {
+      synchronized (addressLock) {
+         if (RoutingType.MULTICAST.equals(routingType)) {
+            final Bindings bindings = addressManager.getBindingsForRoutingAddress(addressName);
+            final boolean existsQueueBindings = bindings.getBindings().stream().anyMatch(QueueBinding.class::isInstance);
+            if (existsQueueBindings) {
+               throw ActiveMQMessageBundle.BUNDLE.invalidMulticastRoutingTypeDelete();
+            }
+         }
+         final AddressInfo updateAddressInfo = addressManager.updateAddressInfoIfPresent(addressName, (name, addressInfo) -> {
+            addressInfo.getRoutingTypes().remove(routingType);
+            return addressInfo;
+         });
+         if (updateAddressInfo == null) {
+            throw ActiveMQMessageBundle.BUNDLE.addressDoesNotExist(addressName);
+         }
+      }
+   }
+
+   @Override
    public AddressInfo removeAddressInfo(SimpleString address) throws Exception {
       synchronized (addressLock) {
          Bindings bindingsForAddress = getBindingsForAddress(address);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
index c0e5b2d..59f285c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/postoffice/impl/SimpleAddressManager.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.function.BiFunction;
 
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.postoffice.Address;
@@ -220,6 +221,12 @@ public class SimpleAddressManager implements AddressManager {
    }
 
    @Override
+   public AddressInfo updateAddressInfoIfPresent(SimpleString addressName,
+                                        BiFunction<? super SimpleString, ? super AddressInfo, ? extends AddressInfo> remappingFunction) {
+      return addressInfoMap.computeIfPresent(addressName, remappingFunction);
+   }
+
+   @Override
    public AddressInfo addOrUpdateAddressInfo(AddressInfo addressInfo) {
       AddressInfo from = addAddressInfo(addressInfo);
       if (from != null) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
index ee8f0ef..5f533ff 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQMessageBundle.java
@@ -413,4 +413,7 @@ public interface ActiveMQMessageBundle {
 
    @Message(id = 119208, value = "Invalid routing type {0}", format = Message.Format.MESSAGE_FORMAT)
    IllegalArgumentException invalidRoutingType(String val);
+
+   @Message(id = 119209, value = "Can't remove MULTICAST routing type, queues exists. Please delete queues before removing this routing type.")
+   IllegalStateException invalidMulticastRoutingTypeDelete();
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ActiveMQServer.java
----------------------------------------------------------------------
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 cc5e51e..65d256a 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
@@ -23,6 +23,7 @@ import java.util.Set;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.config.BridgeConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
@@ -454,6 +455,25 @@ public interface ActiveMQServer extends ActiveMQComponent {
 
    void removeClientConnection(String clientId);
 
+   /**
+    * Add the {@code routingType} from the specified {@code address}.
+    *
+    * @param address     the address name
+    * @param routingType the routing type to be added
+    * @throws ActiveMQAddressDoesNotExistException
+    */
+   void addRoutingType(String address, RoutingType routingType) throws ActiveMQAddressDoesNotExistException;
+
+   /**
+    * Remove the {@code routingType} from the specified {@code address}.
+    *
+    * @param address     the address name
+    * @param routingType the routing type to be removed
+    * @throws ActiveMQAddressDoesNotExistException
+    * @throws IllegalStateException                when a binding already exists and is requested to remove {@link org.apache.activemq.artemis.core.server.RoutingType#MULTICAST}.
+    */
+   void removeRoutingType(String address, RoutingType routingType) throws Exception;
+
    AddressInfo putAddressInfoIfAbsent(AddressInfo addressInfo) throws Exception;
 
    void createAddressInfo(AddressInfo addressInfo) throws Exception;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImpl.java
----------------------------------------------------------------------
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 dcb4d45..64fe2b7 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
@@ -48,6 +48,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
 import org.apache.activemq.artemis.api.core.ActiveMQDeleteAddressException;
 import org.apache.activemq.artemis.api.core.Pair;
 import org.apache.activemq.artemis.api.core.SimpleString;
@@ -2396,6 +2397,18 @@ public class ActiveMQServerImpl implements ActiveMQServer {
    }
 
    @Override
+   public void addRoutingType(String address, RoutingType routingType) throws ActiveMQAddressDoesNotExistException {
+      final SimpleString addressName = new SimpleString(address);
+      postOffice.addRoutingType(addressName,routingType);
+   }
+
+   @Override
+   public void removeRoutingType(String address, RoutingType routingType) throws Exception {
+      final SimpleString addressName = new SimpleString(address);
+      postOffice.removeRoutingType(addressName,routingType);
+   }
+
+   @Override
    public AddressInfo putAddressInfoIfAbsent(AddressInfo addressInfo) throws Exception {
       AddressInfo result = postOffice.addAddressInfo(addressInfo);
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/AddressCommandTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/AddressCommandTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/AddressCommandTest.java
index 6c373ec..226cfbc 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/AddressCommandTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/AddressCommandTest.java
@@ -18,12 +18,15 @@ package org.apache.activemq.artemis.tests.integration.cli;
 
 import java.io.ByteArrayOutputStream;
 import java.io.PrintStream;
+import java.util.EnumSet;
 
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.cli.commands.AbstractAction;
 import org.apache.activemq.artemis.cli.commands.ActionContext;
+import org.apache.activemq.artemis.cli.commands.address.AddRoutingType;
 import org.apache.activemq.artemis.cli.commands.address.CreateAddress;
 import org.apache.activemq.artemis.cli.commands.address.DeleteAddress;
+import org.apache.activemq.artemis.cli.commands.address.RemoveRoutingType;
 import org.apache.activemq.artemis.cli.commands.address.ShowAddress;
 import org.apache.activemq.artemis.core.config.DivertConfiguration;
 import org.apache.activemq.artemis.core.server.RoutingType;
@@ -98,6 +101,20 @@ public class AddressCommandTest extends JMSTestBase {
    }
 
    @Test
+   public void testFailDeleteAddressWhenExistsQueues() throws Exception {
+      final String addressName = "address";
+      final SimpleString addressSimpleString = new SimpleString(addressName);
+      final AddressInfo addressInfo = new AddressInfo(addressSimpleString, EnumSet.of(RoutingType.ANYCAST, RoutingType.MULTICAST));
+      server.createAddressInfo(addressInfo);
+      server.createQueue(addressSimpleString, RoutingType.MULTICAST, new SimpleString("queue1"), null, true, false);
+
+      final DeleteAddress deleteAddress = new DeleteAddress();
+      deleteAddress.setName(addressName);
+      deleteAddress.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionFailure(deleteAddress, "Address " + addressName + " has bindings");
+   }
+
+   @Test
    public void testShowAddress() throws Exception {
       String address = "address";
       CreateAddress command = new CreateAddress();
@@ -142,6 +159,79 @@ public class AddressCommandTest extends JMSTestBase {
       System.out.println(output.toString());
    }
 
+   @Test
+   public void testAddRoutingType() throws Exception {
+      final String addressName = "address";
+      final SimpleString address = new SimpleString(addressName);
+      server.createAddressInfo(new AddressInfo(address, RoutingType.ANYCAST));
+
+      final AddRoutingType addRoutingType = new AddRoutingType();
+      addRoutingType.setName(addressName);
+      addRoutingType.setRoutingType(RoutingType.MULTICAST.toString());
+      addRoutingType.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionPassed(addRoutingType);
+
+      final AddressInfo addressInfo = server.getAddressInfo(address);
+      assertNotNull(addressInfo);
+      assertEquals(EnumSet.of(RoutingType.ANYCAST, RoutingType.MULTICAST), addressInfo.getRoutingTypes());
+   }
+
+   @Test
+   public void testFailAddRoutingTypeAddressDoesNotExist() throws Exception {
+      final String addressName = "address";
+      final AddRoutingType addRoutingType = new AddRoutingType();
+      addRoutingType.setName(addressName);
+      addRoutingType.setRoutingType(RoutingType.MULTICAST.toString());
+      addRoutingType.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionFailure(addRoutingType, "Address Does Not Exist");
+      final AddressInfo addressInfo = server.getAddressInfo(new SimpleString(addressName));
+      assertNull(addressInfo);
+   }
+
+   @Test
+   public void testRemoveRoutingType() throws Exception {
+      final String addressName = "address";
+      final SimpleString address = new SimpleString(addressName);
+      server.createAddressInfo(new AddressInfo(address, EnumSet.of(RoutingType.ANYCAST, RoutingType.MULTICAST)));
+
+      final RemoveRoutingType removeRoutingType = new RemoveRoutingType();
+      removeRoutingType.setName(addressName);
+      removeRoutingType.setRoutingType(RoutingType.MULTICAST.toString());
+      removeRoutingType.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionPassed(removeRoutingType);
+
+      final AddressInfo addressInfo = server.getAddressInfo(new SimpleString(addressName));
+      assertNotNull(addressInfo);
+      assertEquals(EnumSet.of(RoutingType.ANYCAST), addressInfo.getRoutingTypes());
+   }
+
+   @Test
+   public void testFailRemoveRoutingTypeAddressDoesNotExist() throws Exception {
+      final String addressName = "address";
+      final RemoveRoutingType removeRoutingType = new RemoveRoutingType();
+      removeRoutingType.setName(addressName);
+      removeRoutingType.setRoutingType(RoutingType.MULTICAST.toString());
+      removeRoutingType.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionFailure(removeRoutingType, "Address Does Not Exist");
+      final AddressInfo addressInfo = server.getAddressInfo(new SimpleString(addressName));
+      assertNull(addressInfo);
+   }
+
+   @Test
+   public void testFailRemoveMulticastRoutingTypeWhenExistsQueues() throws Exception {
+      final String addressName = "address";
+      final SimpleString addressSimpleString = new SimpleString(addressName);
+      final AddressInfo addressInfo = new AddressInfo(addressSimpleString, EnumSet.of(RoutingType.ANYCAST, RoutingType.MULTICAST));
+      server.createAddressInfo(addressInfo);
+      server.createQueue(addressSimpleString, RoutingType.MULTICAST, new SimpleString("queue1"), null, true, false);
+
+      final RemoveRoutingType removeRoutingType = new RemoveRoutingType();
+      removeRoutingType.setName(addressName);
+      removeRoutingType.setRoutingType(RoutingType.MULTICAST.toString());
+      removeRoutingType.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
+      checkExecutionFailure(removeRoutingType, "Can't remove MULTICAST routing type, queues exists. Please delete queues before removing this routing type.");
+   }
+
    private void checkExecutionPassed(AbstractAction command) throws Exception {
       String fullMessage = output.toString();
       System.out.println("output: " + fullMessage);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/QueueCommandTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/QueueCommandTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/QueueCommandTest.java
index 9bddb8c..b7f1bd6 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/QueueCommandTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/cli/QueueCommandTest.java
@@ -26,6 +26,7 @@ import org.apache.activemq.artemis.cli.commands.queue.CreateQueue;
 import org.apache.activemq.artemis.cli.commands.queue.DeleteQueue;
 import org.apache.activemq.artemis.cli.commands.AbstractAction;
 import org.apache.activemq.artemis.core.server.Queue;
+import org.apache.activemq.artemis.core.server.RoutingType;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 import org.apache.activemq.artemis.tests.util.JMSTestBase;
 import org.junit.Before;
@@ -50,6 +51,7 @@ public class QueueCommandTest extends JMSTestBase {
       String queueName = "queue1";
       CreateQueue command = new CreateQueue();
       command.setName(queueName);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
       checkExecutionFailure(command, "AMQ119203: Address Does Not Exist:");
       assertFalse(server.queueQuery(new SimpleString(queueName)).isExists());
@@ -61,6 +63,7 @@ public class QueueCommandTest extends JMSTestBase {
       CreateQueue command = new CreateQueue();
       command.setName(queueName);
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
       checkExecutionPassed(command);
       assertNotNull(server.getAddressInfo(new SimpleString(queueName)));
@@ -79,9 +82,10 @@ public class QueueCommandTest extends JMSTestBase {
       CreateQueue command = new CreateQueue();
       command.setName(queueName);
       command.setAutoCreateAddress(false);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.setAddress(address);
 
-      server.createOrUpdateAddressInfo(new AddressInfo(new SimpleString(address)));
+      server.createOrUpdateAddressInfo(new AddressInfo(new SimpleString(address), RoutingType.MULTICAST));
 
       command.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
       checkExecutionPassed(command);
@@ -102,6 +106,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName);
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
 
       checkExecutionPassed(command);
@@ -119,6 +124,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName);
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext());
       command.execute(new ActionContext(System.in, new PrintStream(output), new PrintStream(error)));
       checkExecutionFailure(command, "AMQ119019: Queue already exists " + queueName);
@@ -132,6 +138,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName.toString());
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext());
 
       DeleteQueue delete = new DeleteQueue();
@@ -162,6 +169,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName.toString());
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext());
 
       server.locateQueue(queueName).addConsumer(new DummyServerConsumer());
@@ -180,6 +188,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName.toString());
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext());
 
       server.locateQueue(queueName).addConsumer(new DummyServerConsumer());
@@ -199,6 +208,7 @@ public class QueueCommandTest extends JMSTestBase {
       command.setName(queueName.toString());
       command.setFilter("color='green'");
       command.setAutoCreateAddress(true);
+      command.setRoutingType(RoutingType.MULTICAST.name());
       command.execute(new ActionContext());
       assertNotNull(server.getAddressInfo(queueName));
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/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 2831f79..08e37d2 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
@@ -58,6 +58,17 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
    @Override
    protected ActiveMQServerControl createManagementControl() throws Exception {
       return new ActiveMQServerControl() {
+
+         @Override
+         public void addRoutingType(String name, String routingType) throws Exception {
+            proxy.invokeOperation("addRoutingType", name, routingType);
+         }
+
+         @Override
+         public void removeRoutingType(String name, String routingType) throws Exception {
+            proxy.invokeOperation("removeRoutingType", name, routingType);
+         }
+
          @Override
          public void updateDuplicateIdCache(String address, Object[] ids) {
 
@@ -707,8 +718,8 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
          }
 
          @Override
-         public String[] listBindingsForAddress(String address) throws Exception {
-            return new String[0];
+         public String listBindingsForAddress(String address) throws Exception {
+            return "";
          }
 
          @Override

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/6ab133ab/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
----------------------------------------------------------------------
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
index 918ff41..a93cc3c 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/server/impl/fakes/FakePostOffice.java
@@ -20,6 +20,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.activemq.artemis.api.core.ActiveMQAddressDoesNotExistException;
 import org.apache.activemq.artemis.api.core.Pair;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager;
@@ -41,6 +42,17 @@ import org.apache.activemq.artemis.core.transaction.Transaction;
 public class FakePostOffice implements PostOffice {
 
    @Override
+   public void addRoutingType(SimpleString addressName,
+                              RoutingType routingType) throws ActiveMQAddressDoesNotExistException {
+
+   }
+
+   @Override
+   public void removeRoutingType(SimpleString addressName, RoutingType routingType) throws Exception {
+
+   }
+
+   @Override
    public boolean isStarted() {
 
       return false;