activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From andytay...@apache.org
Subject [42/51] [abbrv] [partial] activemq-6 git commit: ACTIVEMQ6-4 - Rename packages to ActiveMQ
Date Tue, 11 Nov 2014 18:42:12 GMT
http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ClusterConnectionControl.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ClusterConnectionControl.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ClusterConnectionControl.java
new file mode 100644
index 0000000..a735978
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ClusterConnectionControl.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import java.util.Map;
+
+/**
+ * A ClusterConnectionControl is used to manage a cluster connection.
+ *
+ * @author <a href="jmesnil@redhat.com">Jeff Mesnil</a>
+ *
+ */
+public interface ClusterConnectionControl extends HornetQComponentControl
+{
+   /**
+    * Returns the configuration name of this cluster connection.
+    */
+   String getName();
+
+   /**
+    * Returns the address used by this cluster connection.
+    */
+   String getAddress();
+
+   /**
+    * Returns the node ID used by this cluster connection.
+    */
+   String getNodeID();
+
+   /**
+    * Return whether this cluster connection use duplicate detection.
+    */
+   boolean isDuplicateDetection();
+
+   /**
+    * Return whether this cluster connection forward messages when it has no local consumers.
+    */
+   boolean isForwardWhenNoConsumers();
+
+   /**
+    * Return the Topology that this Cluster Connection knows about
+    */
+   String getTopology();
+   /**
+    * Returns the maximum number of hops used by this cluster connection.
+    */
+   int getMaxHops();
+
+   /**
+    * Returns the list of static connectors
+    */
+   Object[] getStaticConnectors();
+
+   /**
+    * Returns the list of static connectors as JSON
+    */
+   String getStaticConnectorsAsJSON() throws Exception;
+
+   /**
+    * Returns the name of the discovery group used by this cluster connection.
+    */
+   String getDiscoveryGroupName();
+
+   /**
+    * Returns the connection retry interval used by this cluster connection.
+    */
+   long getRetryInterval();
+
+   /**
+    * Returns a map of the nodes connected to this cluster connection.
+    * <br>
+    * keys are node IDs, values are the addresses used to connect to the nodes.
+    */
+   Map<String, String> getNodes() throws Exception;
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/CoreNotificationType.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/CoreNotificationType.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/CoreNotificationType.java
new file mode 100644
index 0000000..03d807b
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/CoreNotificationType.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+/**
+ * This enum defines all core notification types
+ *
+ * @author <a href="mailto:hgao@redhat.com">Howard Gao</a>
+ */
+public enum CoreNotificationType implements NotificationType
+{
+   BINDING_ADDED(0),
+   BINDING_REMOVED(1),
+   CONSUMER_CREATED(2),
+   CONSUMER_CLOSED(3),
+   SECURITY_AUTHENTICATION_VIOLATION(6),
+   SECURITY_PERMISSION_VIOLATION(7),
+   DISCOVERY_GROUP_STARTED(8),
+   DISCOVERY_GROUP_STOPPED(9),
+   BROADCAST_GROUP_STARTED(10),
+   BROADCAST_GROUP_STOPPED(11),
+   BRIDGE_STARTED(12),
+   BRIDGE_STOPPED(13),
+   CLUSTER_CONNECTION_STARTED(14),
+   CLUSTER_CONNECTION_STOPPED(15),
+   ACCEPTOR_STARTED(16),
+   ACCEPTOR_STOPPED(17),
+   PROPOSAL(18),
+   PROPOSAL_RESPONSE(19),
+   UNPROPOSAL(20),
+   CONSUMER_SLOW(21);
+
+   private final int value;
+
+   private CoreNotificationType(final int value)
+   {
+      this.value = value;
+   }
+
+   public int getType()
+   {
+      return value;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DayCounterInfo.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DayCounterInfo.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DayCounterInfo.java
new file mode 100644
index 0000000..0b1f1d4
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DayCounterInfo.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import java.util.Arrays;
+
+import org.apache.activemq6.utils.json.JSONArray;
+import org.apache.activemq6.utils.json.JSONException;
+import org.apache.activemq6.utils.json.JSONObject;
+
+/**
+ * Helper class to create Java Objects from the
+ * JSON serialization returned by {@link QueueControl#listMessageCounterHistory()}.
+ *
+ *  @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public final class DayCounterInfo
+{
+
+   private final String date;
+
+   private final int[] counters;
+
+   // Static --------------------------------------------------------
+
+   public static String toJSON(final DayCounterInfo[] infos) throws JSONException
+   {
+      JSONObject json = new JSONObject();
+      JSONArray counters = new JSONArray();
+      for (DayCounterInfo info : infos)
+      {
+         JSONObject counter = new JSONObject();
+         counter.put("date", info.getDate());
+         counter.put("counters", Arrays.asList(info.getCounters()));
+         counters.put(counter);
+      }
+      json.put("dayCounters", counters);
+      return json.toString();
+   }
+
+   /**
+    * Returns an array of RoleInfo corresponding to the JSON serialization returned
+    * by {@link QueueControl#listMessageCounterHistory()}.
+    */
+   public static DayCounterInfo[] fromJSON(final String jsonString) throws JSONException
+   {
+      JSONObject json = new JSONObject(jsonString);
+      JSONArray dayCounters = json.getJSONArray("dayCounters");
+      DayCounterInfo[] infos = new DayCounterInfo[dayCounters.length()];
+      for (int i = 0; i < dayCounters.length(); i++)
+      {
+
+         JSONObject counter = (JSONObject)dayCounters.get(i);
+         JSONArray hour = (JSONArray)counter.getJSONArray("counters").get(0);
+         int[] hourCounters = new int[24];
+         for (int j = 0; j < 24; j++)
+         {
+            hourCounters[j] = hour.getInt(j);
+         }
+         DayCounterInfo info = new DayCounterInfo(counter.getString("date"), hourCounters);
+         infos[i] = info;
+      }
+      return infos;
+   }
+
+   // Constructors --------------------------------------------------
+
+   public DayCounterInfo(final String date, final int[] counters)
+   {
+      this.date = date;
+      this.counters = counters;
+   }
+
+   // Public --------------------------------------------------------
+
+   /**
+    * Returns the date of the counter.
+    */
+   public String getDate()
+   {
+      return date;
+   }
+
+   /**
+    * Returns a 24-length array corresponding to the number of messages added to the queue
+    * for the given hour of the day.
+    */
+   public int[] getCounters()
+   {
+      return counters;
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DivertControl.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DivertControl.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DivertControl.java
new file mode 100644
index 0000000..b3a9e10
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/DivertControl.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+/**
+ * A DivertControl is used to manage a divert.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public interface DivertControl
+{
+   /**
+    * Returns the filter used by this divert.
+    */
+   String getFilter();
+
+   /**
+    * Returns whether this divert is exclusive.
+    * <br>
+    * if {@code true} messages will be exclusively diverted and will not be routed to the origin address,
+    * else messages will be routed both to the origin address and the forwarding address.
+    */
+   boolean isExclusive();
+
+   /**
+    * Returns the cluster-wide unique name of this divert.
+    */
+   String getUniqueName();
+
+   /**
+    * Returns the routing name of this divert.
+    */
+   String getRoutingName();
+
+   /**
+    * Returns the origin address used by this divert.
+    */
+   String getAddress();
+
+   /**
+    * Returns the forwarding address used by this divert.
+    */
+   String getForwardingAddress();
+
+   /**
+    * Return the name of the org.apache.activemq6.core.server.cluster.Transformer implementation associated to this bridge.
+    */
+   String getTransformerClassName();
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQComponentControl.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQComponentControl.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQComponentControl.java
new file mode 100644
index 0000000..00f773f
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQComponentControl.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+/**
+ * A HornetQComponentControl is used to manage the life cycle of a HornetQ component.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public interface HornetQComponentControl
+{
+   /**
+    * Returns {@code true} if this component is started, {@code false} else.
+    */
+   boolean isStarted();
+
+   /**
+    * Starts this component.
+    */
+   void start() throws Exception;
+
+   /**
+    * Stops this component.
+    */
+   void stop() throws Exception;
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQServerControl.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQServerControl.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQServerControl.java
new file mode 100644
index 0000000..052d332
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/HornetQServerControl.java
@@ -0,0 +1,621 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import javax.management.MBeanOperationInfo;
+
+/**
+ * A HornetQServerControl is used to manage HornetQ servers.
+ */
+public interface HornetQServerControl
+{
+   /**
+    * Returns this server's version.
+    */
+   String getVersion();
+
+   /**
+    * Returns the number of connections connected to this server.
+    */
+   int getConnectionCount();
+
+   /**
+    * Return whether this server is started.
+    */
+   boolean isStarted();
+
+   /**
+    * Returns the list of interceptors used by this server. Invoking this method is the same as invoking
+    * <code>getIncomingInterceptorClassNames().</code>
+    *
+    * @see org.apache.activemq6.api.core.Interceptor
+    * @deprecated As of HornetQ 2.3.0.Final, replaced by
+    * {@link #getIncomingInterceptorClassNames()} and
+    * {@link #getOutgoingInterceptorClassNames()}
+    */
+   @Deprecated
+   String[] getInterceptorClassNames();
+
+   /**
+    * Returns the list of interceptors used by this server for incoming messages.
+    *
+    * @see org.apache.activemq6.api.core.Interceptor
+    */
+   String[] getIncomingInterceptorClassNames();
+
+   /**
+    * Returns the list of interceptors used by this server for outgoing messages.
+    *
+    * @see org.apache.activemq6.api.core.Interceptor
+    */
+   String[] getOutgoingInterceptorClassNames();
+
+   /**
+    * Returns whether this server is clustered.
+    */
+   boolean isClustered();
+
+   /**
+    * Returns the maximum number of threads in the <em>scheduled</em> thread pool.
+    */
+   int getScheduledThreadPoolMaxSize();
+
+   /**
+    * Returns the maximum number of threads in the thread pool.
+    */
+   int getThreadPoolMaxSize();
+
+   /**
+    * Returns the interval time (in milliseconds) to invalidate security credentials.
+    */
+   long getSecurityInvalidationInterval();
+
+   /**
+    * Returns whether security is enabled for this server.
+    */
+   boolean isSecurityEnabled();
+
+   /**
+    * Returns the file system directory used to store bindings.
+    */
+   String getBindingsDirectory();
+
+   /**
+    * Returns the file system directory used to store journal log.
+    */
+   String getJournalDirectory();
+
+   /**
+    * Returns the type of journal used by this server (either {@code NIO} or {@code ASYNCIO}).
+    */
+   String getJournalType();
+
+   /**
+    * Returns whether the journal is synchronized when receiving transactional data.
+    */
+   boolean isJournalSyncTransactional();
+
+   /**
+    * Returns whether the journal is synchronized when receiving non-transactional data.
+    */
+   boolean isJournalSyncNonTransactional();
+
+   /**
+    * Returns the size (in bytes) of each journal files.
+    */
+   int getJournalFileSize();
+
+   /**
+    * Returns the number of journal files to pre-create.
+    */
+   int getJournalMinFiles();
+
+   /**
+    * Returns the maximum number of write requests that can be in the AIO queue at any given time.
+    */
+   int getJournalMaxIO();
+
+   /**
+    * Returns the size of the internal buffer on the journal.
+    */
+   int getJournalBufferSize();
+
+   /**
+    * Returns the timeout (in nanoseconds) used to flush internal buffers on the journal.
+    */
+   int getJournalBufferTimeout();
+
+   /**
+    * do any clients failover on a server shutdown
+    */
+   void setFailoverOnServerShutdown(boolean failoverOnServerShutdown) throws Exception;
+
+
+   /**
+    * returns if clients failover on a server shutdown
+    */
+   boolean isFailoverOnServerShutdown();
+
+   /**
+    * Returns the minimal number of journal files before compacting.
+    */
+   int getJournalCompactMinFiles();
+
+   /**
+    * Return the percentage of live data before compacting the journal.
+    */
+   int getJournalCompactPercentage();
+
+   /**
+    * Returns whether this server is using persistence and store data.
+    */
+   boolean isPersistenceEnabled();
+
+   /**
+    * Returns whether the bindings directory is created on this server startup.
+    */
+   boolean isCreateBindingsDir();
+
+   /**
+    * Returns whether the journal directory is created on this server startup.
+    */
+   boolean isCreateJournalDir();
+
+   /**
+    * Returns whether message counter is enabled for this server.
+    */
+   boolean isMessageCounterEnabled();
+
+   /**
+    * Returns the maximum number of days kept in memory for message counter.
+    */
+   int getMessageCounterMaxDayCount();
+
+   /**
+    * Sets the maximum number of days kept in memory for message counter.
+    *
+    * @param count value must be greater than 0
+    */
+   void setMessageCounterMaxDayCount(int count) throws Exception;
+
+   /**
+    * Returns the sample period (in milliseconds) to take message counter snapshot.
+    */
+   long getMessageCounterSamplePeriod();
+
+   /**
+    * Sets the sample period to take message counter snapshot.
+    *
+    * @param newPeriod value must be greater than 1000ms
+    */
+   void setMessageCounterSamplePeriod(long newPeriod) throws Exception;
+
+   /**
+    * Returns {@code true} if this server is a backup, {@code false} if it is a live server.
+    * <br>
+    * If a backup server has been activated, returns {@code false}.
+    */
+   boolean isBackup();
+
+   /**
+    * Returns whether this server shares its data store with a corresponding live or backup server.
+    */
+   boolean isSharedStore();
+
+   /**
+    * Returns the file system directory used to store paging files.
+    */
+   String getPagingDirectory();
+
+   /**
+    * Returns whether delivery count is persisted before messages are delivered to the consumers.
+    */
+   boolean isPersistDeliveryCountBeforeDelivery();
+
+   /**
+    * Returns the connection time to live.
+    * <br>
+    * This value overrides the connection time to live <em>sent by the client</em>.
+    */
+   long getConnectionTTLOverride();
+
+   /**
+    * Returns the management address of this server.
+    * <br>
+    * Clients can send management messages to this address to manage this server.
+    */
+   String getManagementAddress();
+
+   /**
+    * Returns the management notification address of this server.
+    * <br>
+    * Clients can bind queues to this address to receive management notifications emitted by this server.
+    */
+   String getManagementNotificationAddress();
+
+   /**
+    * Returns the size of the cache for pre-creating message IDs.
+    */
+   int getIDCacheSize();
+
+   /**
+    * Returns whether message ID cache is persisted.
+    */
+   boolean isPersistIDCache();
+
+   /**
+    * Returns the file system directory used to store large messages.
+    */
+   String getLargeMessagesDirectory();
+
+   /**
+    * Returns whether wildcard routing is supported by this server.
+    */
+   boolean isWildcardRoutingEnabled();
+
+   /**
+    * Returns the timeout (in milliseconds) after which transactions is removed
+    * from the resource manager after it was created.
+    */
+   long getTransactionTimeout();
+
+   /**
+    * Returns the frequency (in milliseconds)  to scan transactions to detect which transactions
+    * have timed out.
+    */
+   long getTransactionTimeoutScanPeriod();
+
+   /**
+    * Returns the frequency (in milliseconds)  to scan messages to detect which messages
+    * have expired.
+    */
+   long getMessageExpiryScanPeriod();
+
+   /**
+    * Returns the priority of the thread used to scan message expiration.
+    */
+   long getMessageExpiryThreadPriority();
+
+   /**
+    * Returns whether code coming from connection is executed asynchronously or not.
+    */
+   boolean isAsyncConnectionExecutionEnabled();
+
+   /**
+    * Returns the connectors configured for this server.
+    */
+   Object[] getConnectors() throws Exception;
+
+   /**
+    * Returns the connectors configured for this server using JSON serialization.
+    */
+   String getConnectorsAsJSON() throws Exception;
+
+   /**
+    * Returns the addresses created on this server.
+    */
+   String[] getAddressNames();
+
+   /**
+    * Returns the names of the queues created on this server.
+    */
+   String[] getQueueNames();
+
+   // Operations ----------------------------------------------------
+
+   /**
+    * Create a durable queue.
+    * <br>
+    * This method throws a {@link org.apache.activemq6.api.core.HornetQQueueExistsException}) exception if the queue already exits.
+    *
+    * @param address address to bind the queue to
+    * @param name    name of the queue
+    */
+   @Operation(desc = "Create a queue with the specified address", impact = MBeanOperationInfo.ACTION)
+   void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
+                    @Parameter(name = "name", desc = "Name of the queue") String name) throws Exception;
+
+   /**
+    * Create a queue.
+    * <br>
+    * This method throws a {@link org.apache.activemq6.api.core.HornetQQueueExistsException}) exception if the queue already exits.
+    *
+    * @param address address to bind the queue to
+    * @param name    name of the queue
+    * @param filter  of the queue
+    * @param durable whether the queue is durable
+    */
+   @Operation(desc = "Create a queue", impact = MBeanOperationInfo.ACTION)
+   void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
+                    @Parameter(name = "name", desc = "Name of the queue") String name,
+                    @Parameter(name = "filter", desc = "Filter of the queue") String filter,
+                    @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
+
+   /**
+    * Create a queue.
+    * <br>
+    * This method throws a {@link org.apache.activemq6.api.core.HornetQQueueExistsException}) exception if the queue already exits.
+    *
+    * @param address address to bind the queue to
+    * @param name    name of the queue
+    * @param durable whether the queue is durable
+    */
+   @Operation(desc = "Create a queue with the specified address, name and durability", impact = MBeanOperationInfo.ACTION)
+   void createQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
+                    @Parameter(name = "name", desc = "Name of the queue") String name,
+                    @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
+
+   /**
+    * Deploy a durable queue.
+    * <br>
+    * This method will do nothing if the queue with the given name already exists on the server.
+    *
+    * @param address address to bind the queue to
+    * @param name    name of the queue
+    * @param filter  of the queue
+    */
+   @Operation(desc = "Deploy a queue", impact = MBeanOperationInfo.ACTION)
+   void deployQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
+                    @Parameter(name = "name", desc = "Name of the queue") String name,
+                    @Parameter(name = "filter", desc = "Filter of the queue") String filter) throws Exception;
+
+   /**
+    * Deploy a queue.
+    * <br>
+    * This method will do nothing if the queue with the given name already exists on the server.
+    *
+    * @param address address to bind the queue to
+    * @param name    name of the queue
+    * @param filter  of the queue
+    * @param durable whether the queue is durable
+    */
+   @Operation(desc = "Deploy a queue", impact = MBeanOperationInfo.ACTION)
+   void deployQueue(@Parameter(name = "address", desc = "Address of the queue") String address,
+                    @Parameter(name = "name", desc = "Name of the queue") String name,
+                    @Parameter(name = "filter", desc = "Filter of the queue") String filter,
+                    @Parameter(name = "durable", desc = "Is the queue durable?") boolean durable) throws Exception;
+
+   /**
+    * Destroys the queue corresponding to the specified name.
+    */
+   @Operation(desc = "Destroy a queue", impact = MBeanOperationInfo.ACTION)
+   void destroyQueue(@Parameter(name = "name", desc = "Name of the queue to destroy") String name) throws Exception;
+
+   /**
+    * Enables message counters for this server.
+    */
+   @Operation(desc = "Enable message counters", impact = MBeanOperationInfo.ACTION)
+   void enableMessageCounters() throws Exception;
+
+   /**
+    * Disables message counters for this server.
+    */
+   @Operation(desc = "Disable message counters", impact = MBeanOperationInfo.ACTION)
+   void disableMessageCounters() throws Exception;
+
+   /**
+    * Reset all message counters.
+    */
+   @Operation(desc = "Reset all message counters", impact = MBeanOperationInfo.ACTION)
+   void resetAllMessageCounters() throws Exception;
+
+   /**
+    * Reset histories for all message counters.
+    */
+   @Operation(desc = "Reset all message counters history", impact = MBeanOperationInfo.ACTION)
+   void resetAllMessageCounterHistories() throws Exception;
+
+   /**
+    * List all the prepared transaction, sorted by date, oldest first.
+    * <br>
+    * The Strings are Base-64 representation of the transaction XID and can be
+    * used to heuristically commit or rollback the transactions.
+    *
+    * @see #commitPreparedTransaction(String)
+    * @see #rollbackPreparedTransaction(String)
+    */
+   @Operation(desc = "List all the prepared transaction, sorted by date, oldest first")
+   String[] listPreparedTransactions() throws Exception;
+
+   /**
+    * List all the prepared transaction, sorted by date,
+    * oldest first, with details, in text format.
+    */
+   @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in JSON format")
+   String listPreparedTransactionDetailsAsJSON() throws Exception;
+
+   /**
+    * List all the prepared transaction, sorted by date,
+    * oldest first, with details, in HTML format
+    */
+   @Operation(desc = "List all the prepared transaction, sorted by date, oldest first, with details, in HTML format")
+   String listPreparedTransactionDetailsAsHTML() throws Exception;
+
+   /**
+    * List transactions which have been heuristically committed.
+    */
+   String[] listHeuristicCommittedTransactions() throws Exception;
+
+   /**
+    * List transactions which have been heuristically rolled back.
+    */
+   String[] listHeuristicRolledBackTransactions() throws Exception;
+
+   /**
+    * Heuristically commits a prepared transaction.
+    *
+    * @param transactionAsBase64 base 64 representation of a prepare transaction
+    * @return {@code true} if the transaction was successfully committed, {@code false} else
+    * @see #listPreparedTransactions()
+    */
+   @Operation(desc = "Commit a prepared transaction")
+   boolean commitPreparedTransaction(@Parameter(desc = "the Base64 representation of a transaction", name = "transactionAsBase64") String transactionAsBase64) throws Exception;
+
+   /**
+    * Heuristically rolls back a prepared transaction.
+    *
+    * @param transactionAsBase64 base 64 representation of a prepare transaction
+    * @return {@code true} if the transaction was successfully rolled back, {@code false} else
+    * @see #listPreparedTransactions()
+    */
+   @Operation(desc = "Rollback a prepared transaction")
+   boolean rollbackPreparedTransaction(@Parameter(desc = "the Base64 representation of a transaction", name = "transactionAsBase64") String transactionAsBase64) throws Exception;
+
+   /**
+    * Lists the addresses of all the clients connected to this address.
+    */
+   @Operation(desc = "List the client addresses", impact = MBeanOperationInfo.INFO)
+   String[] listRemoteAddresses() throws Exception;
+
+   /**
+    * Lists the addresses of the clients connected to this address which matches the specified IP address.
+    */
+   @Operation(desc = "List the client addresses which match the given IP Address", impact = MBeanOperationInfo.INFO)
+   String[] listRemoteAddresses(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
+
+   /**
+    * Closes all the connections of clients connected to this server which matches the specified IP address.
+    */
+   @Operation(desc = "Closes all the connections for the given IP Address", impact = MBeanOperationInfo.INFO)
+   boolean closeConnectionsForAddress(@Parameter(desc = "an IP address", name = "ipAddress") String ipAddress) throws Exception;
+
+   /**
+    * Closes all the connections of clients connected to this server which matches the specified IP address.
+    */
+   @Operation(desc = "Closes all the consumer connections for the given HornetQ address", impact = MBeanOperationInfo.INFO)
+   boolean closeConsumerConnectionsForAddress(@Parameter(desc = "a HornetQ address", name = "address") String address) throws Exception;
+
+   /**
+    * Closes all the connections of sessions with a matching user name.
+    */
+   @Operation(desc = "Closes all the connections for sessions with the given user name", impact = MBeanOperationInfo.INFO)
+   boolean closeConnectionsForUser(@Parameter(desc = "a user name", name = "userName") String address) throws Exception;
+
+   /**
+    * Lists all the IDs of the connections connected to this server.
+    */
+   @Operation(desc = "List all the connection IDs", impact = MBeanOperationInfo.INFO)
+   String[] listConnectionIDs() throws Exception;
+
+   String listProducersInfoAsJSON() throws Exception;
+
+   /**
+    * Lists all the sessions IDs for the specified connection ID.
+    */
+   @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO)
+   String[] listSessions(@Parameter(desc = "a connection ID", name = "connectionID") String connectionID) throws Exception;
+
+   /**
+    * This method is used by HornetQ clustering and must not be called by HornetQ clients.
+    */
+   void sendQueueInfoToQueue(String queueName, String address) throws Exception;
+
+   @Operation(desc = "Add security settings for addresses matching the addressMatch", impact = MBeanOperationInfo.ACTION)
+   void addSecuritySettings(
+      @Parameter(desc = "an address match", name = "addressMatch") String addressMatch,
+      @Parameter(desc = "a comma-separated list of roles allowed to send messages", name = "send") String sendRoles,
+      @Parameter(desc = "a comma-separated list of roles allowed to consume messages", name = "consume") String consumeRoles,
+      @Parameter(desc = "a comma-separated list of roles allowed to create durable queues", name = "createDurableQueueRoles") String createDurableQueueRoles,
+      @Parameter(desc = "a comma-separated list of roles allowed to delete durable queues", name = "deleteDurableQueueRoles") String deleteDurableQueueRoles,
+      @Parameter(desc = "a comma-separated list of roles allowed to create non durable queues", name = "createNonDurableQueueRoles") String createNonDurableQueueRoles,
+      @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) 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;
+
+   @Operation(desc = "get roles for a specific address match", impact = MBeanOperationInfo.INFO)
+   Object[] getRoles(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
+
+   @Operation(desc = "get roles (as a JSON string) for a specific address match", impact = MBeanOperationInfo.INFO)
+   String getRolesAsJSON(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) 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) throws Exception;
+
+   void removeAddressSettings(String addressMatch) throws Exception;
+
+   /**
+    * returns the address settings as a JSON string
+    */
+   @Operation(desc = "returns the address settings as a JSON string for an address match", impact = MBeanOperationInfo.INFO)
+   String getAddressSettingsAsJSON(@Parameter(desc = "an address match", name = "addressMatch") String addressMatch) throws Exception;
+
+   String[] getDivertNames();
+
+   @Operation(desc = "Create a Divert", impact = MBeanOperationInfo.ACTION)
+   void createDivert(@Parameter(name = "name", desc = "Name of the divert") String name,
+                     @Parameter(name = "routingName", desc = "Routing name of the divert") String routingName,
+                     @Parameter(name = "address", desc = "Address to divert from") String address,
+                     @Parameter(name = "forwardingAddress", desc = "Address to divert to") String forwardingAddress,
+                     @Parameter(name = "exclusive", desc = "Is the divert exclusive?") boolean exclusive,
+                     @Parameter(name = "filterString", desc = "Filter of the divert") String filterString,
+                     @Parameter(name = "transformerClassName", desc = "Class name of the divert's transformer") String transformerClassName) throws Exception;
+
+   @Operation(desc = "Destroy a Divert", impact = MBeanOperationInfo.ACTION)
+   void destroyDivert(@Parameter(name = "name", desc = "Name of the divert") String name) throws Exception;
+
+   String[] getBridgeNames();
+
+   @Operation(desc = "Create a Bridge", impact = MBeanOperationInfo.ACTION)
+   void createBridge(@Parameter(name = "name", desc = "Name of the bridge") String name,
+                     @Parameter(name = "queueName", desc = "Name of the source queue") String queueName,
+                     @Parameter(name = "forwardingAddress", desc = "Forwarding address") String forwardingAddress,
+                     @Parameter(name = "filterString", desc = "Filter of the brdige") String filterString,
+                     @Parameter(name = "transformerClassName", desc = "Class name of the bridge transformer") String transformerClassName,
+                     @Parameter(name = "retryInterval", desc = "Connection retry interval") long retryInterval,
+                     @Parameter(name = "retryIntervalMultiplier", desc = "Connection retry interval multiplier") double retryIntervalMultiplier,
+                     @Parameter(name = "initialConnectAttempts", desc = "Number of initial connection attempts") int initialConnectAttempts,
+                     @Parameter(name = "reconnectAttempts", desc = "Number of reconnection attempts") int reconnectAttempts,
+                     @Parameter(name = "useDuplicateDetection", desc = "Use duplicate detection") boolean useDuplicateDetection,
+                     @Parameter(name = "confirmationWindowSize", desc = "Confirmation window size") int confirmationWindowSize,
+                     @Parameter(name = "clientFailureCheckPeriod", desc = "Period to check client failure") long clientFailureCheckPeriod,
+                     @Parameter(name = "staticConnectorNames", desc = "comma separated list of connector names or name of discovery group if 'useDiscoveryGroup' is set to true") String connectorNames,
+                     @Parameter(name = "useDiscoveryGroup", desc = "use discovery  group") boolean useDiscoveryGroup,
+                     @Parameter(name = "ha", desc = "Is it using HA") boolean ha,
+                     @Parameter(name = "user", desc = "User name") String user,
+                     @Parameter(name = "password", desc = "User password") String password) throws Exception;
+
+
+   @Operation(desc = "Destroy a bridge", impact = MBeanOperationInfo.ACTION)
+   void destroyBridge(@Parameter(name = "name", desc = "Name of the bridge") String name) throws Exception;
+
+   @Operation(desc = "force the server to stop and notify clients to failover", impact = MBeanOperationInfo.UNKNOWN)
+   void forceFailover() throws Exception;
+
+   void updateDuplicateIdCache(String address, Object[] ids) throws Exception;
+
+   @Operation(desc = "force the server to stop and to scale down to another server", impact = MBeanOperationInfo.UNKNOWN)
+   void scaleDown(@Parameter(name = "name", desc = "The connector to use to scale down, if not provided the first appropriate connector will be used")String connector) throws Exception;
+}
+

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ManagementHelper.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ManagementHelper.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ManagementHelper.java
new file mode 100644
index 0000000..b0e980e
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ManagementHelper.java
@@ -0,0 +1,459 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.activemq6.api.core.Message;
+import org.apache.activemq6.api.core.SimpleString;
+import org.apache.activemq6.core.client.HornetQClientMessageBundle;
+import org.apache.activemq6.utils.json.JSONArray;
+import org.apache.activemq6.utils.json.JSONObject;
+
+/**
+ * Helper class to use HornetQ Core messages to manage server resources.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ * @author <a href="mailto:tim.fox@jboss.com">Tim Fox</a>
+ */
+public final class ManagementHelper
+{
+   // Constants -----------------------------------------------------
+
+   public static final SimpleString HDR_RESOURCE_NAME = new SimpleString("_HQ_ResourceName");
+
+   public static final SimpleString HDR_ATTRIBUTE = new SimpleString("_HQ_Attribute");
+
+   public static final SimpleString HDR_OPERATION_NAME = new SimpleString("_HQ_OperationName");
+
+   public static final SimpleString HDR_OPERATION_SUCCEEDED = new SimpleString("_HQ_OperationSucceeded");
+
+   public static final SimpleString HDR_NOTIFICATION_TYPE = new SimpleString("_HQ_NotifType");
+
+   public static final SimpleString HDR_NOTIFICATION_TIMESTAMP = new SimpleString("_HQ_NotifTimestamp");
+
+   public static final SimpleString HDR_ROUTING_NAME = new SimpleString("_HQ_RoutingName");
+
+   public static final SimpleString HDR_CLUSTER_NAME = new SimpleString("_HQ_ClusterName");
+
+   public static final SimpleString HDR_ADDRESS = new SimpleString("_HQ_Address");
+
+   public static final SimpleString HDR_BINDING_ID = new SimpleString("_HQ_Binding_ID");
+
+   public static final SimpleString HDR_BINDING_TYPE = new SimpleString("_HQ_Binding_Type");
+
+   public static final SimpleString HDR_FILTERSTRING = new SimpleString("_HQ_FilterString");
+
+   public static final SimpleString HDR_DISTANCE = new SimpleString("_HQ_Distance");
+
+   public static final SimpleString HDR_CONSUMER_COUNT = new SimpleString("_HQ_ConsumerCount");
+
+   public static final SimpleString HDR_USER = new SimpleString("_HQ_User");
+
+   public static final SimpleString HDR_CHECK_TYPE = new SimpleString("_HQ_CheckType");
+
+   public static final SimpleString HDR_SESSION_NAME = new SimpleString("_HQ_SessionName");
+
+   public static final SimpleString HDR_REMOTE_ADDRESS = new SimpleString("_HQ_RemoteAddress");
+
+   public static final SimpleString HDR_PROPOSAL_GROUP_ID = new SimpleString("_JBM_ProposalGroupId");
+
+   public static final SimpleString HDR_PROPOSAL_VALUE = new SimpleString("_JBM_ProposalValue");
+
+   public static final SimpleString HDR_PROPOSAL_ALT_VALUE = new SimpleString("_JBM_ProposalAltValue");
+
+   public static final SimpleString HDR_CONSUMER_NAME = new SimpleString("_HQ_ConsumerName");
+
+   public static final SimpleString HDR_CONNECTION_NAME = new SimpleString("_HQ_ConnectionName");
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   /**
+    * Stores a resource attribute in a message to retrieve the value from the server resource.
+    *
+    * @param message      message
+    * @param resourceName the name of the resource
+    * @param attribute    the name of the attribute
+    * @see ResourceNames
+    */
+   public static void putAttribute(final Message message, final String resourceName, final String attribute)
+   {
+      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, new SimpleString(resourceName));
+      message.putStringProperty(ManagementHelper.HDR_ATTRIBUTE, new SimpleString(attribute));
+   }
+
+   /**
+    * Stores a operation invocation in a message to invoke the corresponding operation the value from the server resource.
+    *
+    * @param message       message
+    * @param resourceName  the name of the resource
+    * @param operationName the name of the operation to invoke on the resource
+    * @see ResourceNames
+    */
+   public static void putOperationInvocation(final Message message,
+                                             final String resourceName,
+                                             final String operationName) throws Exception
+   {
+      ManagementHelper.putOperationInvocation(message, resourceName, operationName, (Object[]) null);
+   }
+
+   /**
+    * Stores a operation invocation in a  message to invoke the corresponding operation the value from the server resource.
+    *
+    * @param message       message
+    * @param resourceName  the name of the server resource
+    * @param operationName the name of the operation to invoke on the server resource
+    * @param parameters    the parameters to use to invoke the server resource
+    * @see ResourceNames
+    */
+   public static void putOperationInvocation(final Message message,
+                                             final String resourceName,
+                                             final String operationName,
+                                             final Object... parameters) throws Exception
+   {
+      // store the name of the operation in the headers
+      message.putStringProperty(ManagementHelper.HDR_RESOURCE_NAME, new SimpleString(resourceName));
+      message.putStringProperty(ManagementHelper.HDR_OPERATION_NAME, new SimpleString(operationName));
+
+      // and the params go in the body, since might be too large for header
+
+      String paramString;
+
+      if (parameters != null)
+      {
+         JSONArray jsonArray = ManagementHelper.toJSONArray(parameters);
+
+         paramString = jsonArray.toString();
+      }
+      else
+      {
+         paramString = null;
+      }
+
+      message.getBodyBuffer().writeNullableSimpleString(SimpleString.toSimpleString(paramString));
+   }
+
+   private static JSONArray toJSONArray(final Object[] array) throws Exception
+   {
+      JSONArray jsonArray = new JSONArray();
+
+      for (Object parameter : array)
+      {
+         if (parameter instanceof Map)
+         {
+            Map<String, Object> map = (Map<String, Object>) parameter;
+
+            JSONObject jsonObject = new JSONObject();
+
+            for (Map.Entry<String, Object> entry : map.entrySet())
+            {
+               String key = entry.getKey();
+
+               Object val = entry.getValue();
+
+               if (val != null)
+               {
+                  if (val.getClass().isArray())
+                  {
+                     val = ManagementHelper.toJSONArray((Object[]) val);
+                  }
+                  else
+                  {
+                     ManagementHelper.checkType(val);
+                  }
+               }
+
+               jsonObject.put(key, val);
+            }
+
+            jsonArray.put(jsonObject);
+         }
+         else
+         {
+            if (parameter != null)
+            {
+               Class<?> clz = parameter.getClass();
+
+               if (clz.isArray())
+               {
+                  Object[] innerArray = (Object[]) parameter;
+
+                  jsonArray.put(ManagementHelper.toJSONArray(innerArray));
+               }
+               else
+               {
+                  ManagementHelper.checkType(parameter);
+
+                  jsonArray.put(parameter);
+               }
+            }
+            else
+            {
+               jsonArray.put((Object) null);
+            }
+         }
+      }
+
+      return jsonArray;
+   }
+
+   private static Object[] fromJSONArray(final JSONArray jsonArray) throws Exception
+   {
+      Object[] array = new Object[jsonArray.length()];
+
+      for (int i = 0; i < jsonArray.length(); i++)
+      {
+         Object val = jsonArray.get(i);
+
+         if (val instanceof JSONArray)
+         {
+            Object[] inner = ManagementHelper.fromJSONArray((JSONArray) val);
+
+            array[i] = inner;
+         }
+         else if (val instanceof JSONObject)
+         {
+            JSONObject jsonObject = (JSONObject) val;
+
+            Map<String, Object> map = new HashMap<String, Object>();
+
+            Iterator<String> iter = jsonObject.keys();
+
+            while (iter.hasNext())
+            {
+               String key = iter.next();
+
+               Object innerVal = jsonObject.get(key);
+
+               if (innerVal instanceof JSONArray)
+               {
+                  innerVal = ManagementHelper.fromJSONArray(((JSONArray) innerVal));
+               }
+               else if (innerVal instanceof JSONObject)
+               {
+                  Map<String, Object> innerMap = new HashMap<String, Object>();
+                  JSONObject o = (JSONObject) innerVal;
+                  Iterator it = o.keys();
+                  while (it.hasNext())
+                  {
+                     String k = (String) it.next();
+                     innerMap.put(k, o.get(k));
+                  }
+                  innerVal = innerMap;
+               }
+               else if (innerVal instanceof Integer)
+               {
+                  innerVal = ((Integer) innerVal).longValue();
+               }
+
+               map.put(key, innerVal);
+            }
+
+            array[i] = map;
+         }
+         else
+         {
+            if (val == JSONObject.NULL)
+            {
+               array[i] = null;
+            }
+            else
+            {
+               array[i] = val;
+            }
+         }
+      }
+
+      return array;
+   }
+
+   private static void checkType(final Object param)
+   {
+      if (param instanceof Integer == false && param instanceof Long == false &&
+         param instanceof Double == false &&
+         param instanceof String == false &&
+         param instanceof Boolean == false &&
+         param instanceof Map == false &&
+         param instanceof Byte == false &&
+         param instanceof Short == false)
+      {
+         throw HornetQClientMessageBundle.BUNDLE.invalidManagementParam(param.getClass().getName());
+      }
+   }
+
+   /**
+    * Used by HornetQ management service.
+    */
+   public static Object[] retrieveOperationParameters(final Message message) throws Exception
+   {
+      SimpleString sstring = message.getBodyBuffer().readNullableSimpleString();
+      String jsonString = (sstring == null) ? null : sstring.toString();
+
+      if (jsonString != null)
+      {
+         JSONArray jsonArray = new JSONArray(jsonString);
+
+         return ManagementHelper.fromJSONArray(jsonArray);
+      }
+      else
+      {
+         return null;
+      }
+   }
+
+   /**
+    * Returns whether the JMS message corresponds to the result of a management operation invocation.
+    */
+   public static boolean isOperationResult(final Message message)
+   {
+      return message.containsProperty(ManagementHelper.HDR_OPERATION_SUCCEEDED);
+   }
+
+   /**
+    * Returns whether the JMS message corresponds to the result of a management attribute value.
+    */
+   public static boolean isAttributesResult(final Message message)
+   {
+      return !ManagementHelper.isOperationResult(message);
+   }
+
+   /**
+    * Used by HornetQ management service.
+    */
+   public static void storeResult(final Message message, final Object result) throws Exception
+   {
+      String resultString;
+
+      if (result != null)
+      {
+         // Result is stored in body, also encoded as JSON array of length 1
+
+         JSONArray jsonArray = ManagementHelper.toJSONArray(new Object[]{result});
+
+         resultString = jsonArray.toString();
+      }
+      else
+      {
+         resultString = null;
+      }
+
+      message.getBodyBuffer().writeNullableSimpleString(SimpleString.toSimpleString(resultString));
+   }
+
+   /**
+    * Returns the result of an operation invocation or an attribute value.
+    * <br>
+    * If an error occurred on the server, {@link #hasOperationSucceeded(Message)} will return {@code false}.
+    * and the result will be a String corresponding to the server exception.
+    */
+   public static Object[] getResults(final Message message) throws Exception
+   {
+      SimpleString sstring = message.getBodyBuffer().readNullableSimpleString();
+      String jsonString = (sstring == null) ? null : sstring.toString();
+
+      if (jsonString != null)
+      {
+         JSONArray jsonArray = new JSONArray(jsonString);
+
+         Object[] res = ManagementHelper.fromJSONArray(jsonArray);
+
+         return res;
+      }
+      else
+      {
+         return null;
+      }
+   }
+
+   /**
+    * Returns the result of an operation invocation or an attribute value.
+    * <br>
+    * If an error occurred on the server, {@link #hasOperationSucceeded(Message)} will return {@code false}.
+    * and the result will be a String corresponding to the server exception.
+    */
+   public static Object getResult(final Message message) throws Exception
+   {
+      Object[] res = ManagementHelper.getResults(message);
+
+      if (res != null)
+      {
+         return res[0];
+      }
+      else
+      {
+         return null;
+      }
+   }
+
+   /**
+    * Returns whether the invocation of the management operation on the server resource succeeded.
+    */
+   public static boolean hasOperationSucceeded(final Message message)
+   {
+      if (!ManagementHelper.isOperationResult(message))
+      {
+         return false;
+      }
+      if (message.containsProperty(ManagementHelper.HDR_OPERATION_SUCCEEDED))
+      {
+         return message.getBooleanProperty(ManagementHelper.HDR_OPERATION_SUCCEEDED);
+      }
+      return false;
+   }
+
+   /**
+    * Used by HornetQ management service.
+    */
+   public static Map<String, Object> fromCommaSeparatedKeyValues(final String str) throws Exception
+   {
+      if (str == null || str.trim().length() == 0)
+      {
+         return Collections.emptyMap();
+      }
+
+      // create a JSON array with 1 object:
+      JSONArray array = new JSONArray("[{" + str + "}]");
+      Map<String, Object> params = (Map<String, Object>) ManagementHelper.fromJSONArray(array)[0];
+      return params;
+   }
+
+   /**
+    * Used by HornetQ management service.
+    */
+   public static Object[] fromCommaSeparatedArrayOfCommaSeparatedKeyValues(final String str) throws Exception
+   {
+      if (str == null || str.trim().length() == 0)
+      {
+         return new Object[0];
+      }
+
+      String s = str;
+
+      // if there is a single item, we wrap it in to make it a JSON object
+      if (!s.trim().startsWith("{"))
+      {
+         s = "{" + s + "}";
+      }
+      JSONArray array = new JSONArray("[" + s + "]");
+      return ManagementHelper.fromJSONArray(array);
+   }
+
+   private ManagementHelper()
+   {
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/NotificationType.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/NotificationType.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/NotificationType.java
new file mode 100644
index 0000000..b281c23
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/NotificationType.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+/**
+ * Types of notification emitted by HornetQ servers.
+ * <p>
+ * These notifications can be received through:
+ * <ul>
+ * <li>JMX' MBeans subscriptions
+ * <li>Core messages to a notification address (default value is {@code hornetq.notifications})
+ * <li>JMS messages
+ * </ul>
+ * @see the HornetQ user manual section on "Management Notifications"
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public interface NotificationType
+{
+   int getType();
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ObjectNameBuilder.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ObjectNameBuilder.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ObjectNameBuilder.java
new file mode 100644
index 0000000..6a821b8
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/ObjectNameBuilder.java
@@ -0,0 +1,203 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import javax.management.ObjectName;
+
+import org.apache.activemq6.api.config.HornetQDefaultConfiguration;
+import org.apache.activemq6.api.core.SimpleString;
+
+/**
+ * Helper class to build ObjectNames for HornetQ resources.
+ * @author <a href="jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public final class ObjectNameBuilder
+{
+
+   // Constants -----------------------------------------------------
+
+   /**
+    * Default JMX domain for HornetQ resources.
+    */
+   public static final ObjectNameBuilder DEFAULT = new ObjectNameBuilder(HornetQDefaultConfiguration.getDefaultJmxDomain());
+
+   static final String JMS_MODULE = "JMS";
+
+   static final String CORE_MODULE = "Core";
+
+   // Attributes ----------------------------------------------------
+
+   private final String domain;
+
+   // Static --------------------------------------------------------
+
+   public static ObjectNameBuilder create(final String domain)
+   {
+      if (domain == null)
+      {
+         return new ObjectNameBuilder(HornetQDefaultConfiguration.getDefaultJmxDomain());
+      }
+      else
+      {
+         return new ObjectNameBuilder(domain);
+      }
+   }
+
+   // Constructors --------------------------------------------------
+
+   private ObjectNameBuilder(final String domain)
+   {
+      this.domain = domain;
+   }
+
+   // Public --------------------------------------------------------
+
+   /**
+    * Returns the ObjectName used by the single {@link HornetQServerControl}.
+    */
+   public ObjectName getHornetQServerObjectName() throws Exception
+   {
+      return ObjectName.getInstance(domain + ":module=Core,type=Server");
+   }
+
+   /**
+    * Returns the ObjectName used by AddressControl.
+    *
+    * @see AddressControl
+    */
+   public ObjectName getAddressObjectName(final SimpleString address) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "Address", address.toString());
+   }
+
+   /**
+    * Returns the ObjectName used by QueueControl.
+    *
+    * @see QueueControl
+    */
+   public ObjectName getQueueObjectName(final SimpleString address, final SimpleString name) throws Exception
+   {
+      return ObjectName.getInstance(String.format("%s:module=%s,type=%s,address=%s,name=%s",
+                                                  domain,
+                                                  ObjectNameBuilder.CORE_MODULE,
+                                                  "Queue",
+                                                  ObjectName.quote(address.toString()),
+                                                  ObjectName.quote(name.toString())));
+   }
+
+   /**
+    * Returns the ObjectName used by DivertControl.
+    *
+    * @see DivertControl
+    */
+   public ObjectName getDivertObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "Divert", name.toString());
+   }
+
+   /**
+    * Returns the ObjectName used by AcceptorControl.
+    *
+    * @see AcceptorControl
+    */
+   public ObjectName getAcceptorObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "Acceptor", name);
+   }
+
+   /**
+    * Returns the ObjectName used by BroadcastGroupControl.
+    *
+    * @see BroadcastGroupControl
+    */
+   public ObjectName getBroadcastGroupObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "BroadcastGroup", name);
+   }
+
+   /**
+    * Returns the ObjectName used by BridgeControl.
+    *
+    * @see BridgeControl
+    */
+   public ObjectName getBridgeObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "Bridge", name);
+   }
+
+   /**
+    * Returns the ObjectName used by ClusterConnectionControl.
+    *
+    * @see ClusterConnectionControl
+    */
+   public ObjectName getClusterConnectionObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "ClusterConnection", name);
+   }
+
+   /**
+    * Returns the ObjectName used by DiscoveryGroupControl.
+    *
+    * @see DiscoveryGroupControl
+    */
+   public ObjectName getDiscoveryGroupObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.CORE_MODULE, "DiscoveryGroup", name);
+   }
+
+   /**
+    * Returns the ObjectName used by JMSServerControl.
+    * @see org.apache.activemq6.api.jms.management.JMSServerControl
+    */
+   public ObjectName getJMSServerObjectName() throws Exception
+   {
+      return ObjectName.getInstance(domain + ":module=JMS,type=Server");
+   }
+
+   /**
+    * Returns the ObjectName used by JMSQueueControl.
+    * @see org.apache.activemq6.api.jms.management.JMSQueueControl
+    */
+   public ObjectName getJMSQueueObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.JMS_MODULE, "Queue", name);
+   }
+
+   /**
+    * Returns the ObjectName used by TopicControl.
+    *
+    * @see TopicControl
+    */
+   public ObjectName getJMSTopicObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.JMS_MODULE, "Topic", name);
+   }
+
+   /**
+    * Returns the ObjectName used by ConnectionFactoryControl.
+    * @see org.apache.activemq6.api.jms.management.ConnectionFactoryControl
+    */
+   public ObjectName getConnectionFactoryObjectName(final String name) throws Exception
+   {
+      return createObjectName(ObjectNameBuilder.JMS_MODULE, "ConnectionFactory", name);
+   }
+
+   private ObjectName createObjectName(final String module, final String type, final String name) throws Exception
+   {
+      return ObjectName.getInstance(String.format("%s:module=%s,type=%s,name=%s",
+                                                  domain,
+                                                  module,
+                                                  type,
+                                                  ObjectName.quote(name)));
+   }
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Operation.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Operation.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Operation.java
new file mode 100644
index 0000000..67388cc
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Operation.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Inherited;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+import javax.management.MBeanOperationInfo;
+
+/**
+ * Info for a MBean Operation.
+ * <p>
+ * This annotation is used only for methods which can be invoked
+ * through a GUI.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.METHOD)
+@Inherited
+public @interface Operation
+{
+   String desc();
+
+   int impact() default MBeanOperationInfo.INFO;
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Parameter.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Parameter.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Parameter.java
new file mode 100644
index 0000000..75834a5
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/Parameter.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Info for a MBean Operation Parameter.
+ * <p>
+ * This annotation is used only for methods which can be invoked
+ * through a GUI.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.PARAMETER)
+public @interface Parameter
+{
+   String name();
+
+   String desc() default "N/A";
+}

http://git-wip-us.apache.org/repos/asf/activemq-6/blob/23e8edd9/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/QueueControl.java
----------------------------------------------------------------------
diff --git a/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/QueueControl.java b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/QueueControl.java
new file mode 100644
index 0000000..e28e9bb
--- /dev/null
+++ b/activemq6-core-client/src/main/java/org/apache/activemq6/api/core/management/QueueControl.java
@@ -0,0 +1,379 @@
+/*
+ * Copyright 2005-2014 Red Hat, Inc.
+ * Red Hat 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.activemq6.api.core.management;
+
+import javax.management.MBeanOperationInfo;
+import java.util.Map;
+
+
+/**
+ * A QueueControl is used to manage a queue.
+ *
+ * @author <a href="mailto:jmesnil@redhat.com">Jeff Mesnil</a>
+ */
+public interface QueueControl
+{
+   // Attributes ----------------------------------------------------
+
+   /**
+    * Returns the name of this queue.
+    */
+   String getName();
+
+   /**
+    * Returns the address this queue is bound to.
+    */
+   String getAddress();
+
+   /**
+    * Returns this queue ID.
+    */
+   long getID();
+
+   /**
+    * Returns whether this queue is temporary.
+    */
+   boolean isTemporary();
+
+   /**
+    * Returns whether this queue is durable.
+    */
+   boolean isDurable();
+
+   /**
+    * Returns the filter associated to this queue.
+    */
+   String getFilter();
+
+   /**
+    * Returns the number of messages currently in this queue.
+    */
+   long getMessageCount();
+
+   /**
+    * Returns the number of scheduled messages in this queue.
+    */
+   long getScheduledCount();
+
+   /**
+    * Returns the number of consumers consuming messages from this queue.
+    */
+   int getConsumerCount();
+
+   /**
+    * Returns the number of messages that this queue is currently delivering to its consumers.
+    */
+   int getDeliveringCount();
+
+   /**
+    * Returns the number of messages added to this queue since it was created.
+    */
+   long getMessagesAdded();
+
+   /**
+    * Returns the number of messages added to this queue since it was created.
+    */
+   long getMessagesAcknowledged();
+
+   /**
+    * Returns the first message on the queue as JSON
+    */
+   String getFirstMessageAsJSON() throws Exception;
+
+   /**
+    * Returns the expiry address associated to this queue.
+    */
+   String getExpiryAddress();
+
+   /**
+    * Sets the expiry address associated to this queue to the specified expiryAddress.
+    */
+   void setExpiryAddress(@Parameter(name = "expiryAddress", desc = "Expiry address of the queue") String expiryAddress) throws Exception;
+
+   /**
+    * Returns the dead-letter address associated to this queue.
+    */
+   String getDeadLetterAddress();
+
+   /**
+    * Sets the dead-letter address associated to this queue to the specified deadLetterAddress.
+    */
+   void setDeadLetterAddress(@Parameter(name = "deadLetterAddress", desc = "Dead-letter address of the queue") String deadLetterAddress) throws Exception;
+
+   // Operations ----------------------------------------------------
+
+   /**
+    * Lists all the messages scheduled for delivery for this queue.
+    * <br>
+    * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
+    */
+   @Operation(desc = "List the messages scheduled for delivery", impact = MBeanOperationInfo.INFO)
+   Map<String, Object>[] listScheduledMessages() throws Exception;
+
+   /**
+    * Lists all the messages scheduled for delivery for this queue using JSON serialization.
+    */
+   @Operation(desc = "List the messages scheduled for delivery and returns them using JSON", impact = MBeanOperationInfo.INFO)
+   String listScheduledMessagesAsJSON() throws Exception;
+
+   /**
+    * Lists all the messages being deliver per consumer.
+    * <br>
+    * The Map's key is a toString representation for the consumer. Each consumer will then return a {@code Map<String,Object>[]} same way is returned by {@link #listScheduledMessages()}
+    */
+   @Operation(desc = "List all messages being delivered per consumer")
+   Map<String, Map<String, Object>[]> listDeliveringMessages() throws Exception;
+
+   /**
+    * Executes a conversion of {@link #listDeliveringMessages()} to JSON
+    *
+    * @return
+    * @throws Exception
+    */
+   @Operation(desc = "list all messages being delivered per consumer using JSON form")
+   String listDeliveringMessagesAsJSON() throws Exception;
+
+   /**
+    * Lists all the messages in this queue matching the specified filter.
+    * <br>
+    * 1 Map represents 1 message, keys are the message's properties and headers, values are the corresponding values.
+    * <br>
+    * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
+    */
+   @Operation(desc = "List all the messages in the queue matching the given filter", impact = MBeanOperationInfo.INFO)
+   Map<String, Object>[] listMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
+
+   /**
+    * Lists all the messages in this queue matching the specified filter using JSON serialization.
+    * <br>
+    * Using {@code null} or an empty filter will list <em>all</em> messages from this queue.
+    */
+   @Operation(desc = "List all the messages in the queue matching the given filter and returns them using JSON", impact = MBeanOperationInfo.INFO)
+   String listMessagesAsJSON(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
+
+   /**
+    * Counts the number of messages in this queue matching the specified filter.
+    * <br>
+    * Using {@code null} or an empty filter will count <em>all</em> messages from this queue.
+    */
+   @Operation(desc = "Returns the number of the messages in the queue matching the given filter", impact = MBeanOperationInfo.INFO)
+   long countMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
+
+   /**
+    * Removes the message corresponding to the specified message ID.
+    *
+    * @return {@code true} if the message was removed, {@code false} else
+    */
+   @Operation(desc = "Remove the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
+   boolean removeMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
+
+   /**
+    * Removes all the message corresponding to the specified filter.
+    * <br>
+    * Using {@code null} or an empty filter will remove <em>all</em> messages from this queue.
+    *
+    * @return the number of removed messages
+    */
+   @Operation(desc = "Remove the messages corresponding to the given filter (and returns the number of removed messages)", impact = MBeanOperationInfo.ACTION)
+   int removeMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
+
+   /**
+    * Removes all the message corresponding to the specified filter.
+    * <br>
+    * Using {@code null} or an empty filter will remove <em>all</em> messages from this queue.
+    *
+    * @return the number of removed messages
+    */
+   @Operation(desc = "Remove the messages corresponding to the given filter (and returns the number of removed messages)", impact = MBeanOperationInfo.ACTION)
+   int removeMessages(@Parameter(name = "flushLimit", desc = "Limit to flush transactions during the operation to avoid OutOfMemory") int flushLimit,
+                      @Parameter(name = "filter", desc = "A message filter (can be empty)") String filter) throws Exception;
+
+   /**
+    * Expires all the message corresponding to the specified filter.
+    * <br>
+    * Using {@code null} or an empty filter will expire <em>all</em> messages from this queue.
+    *
+    * @return the number of expired messages
+    */
+   @Operation(desc = "Expire the messages corresponding to the given filter (and returns the number of expired messages)", impact = MBeanOperationInfo.ACTION)
+   int expireMessages(@Parameter(name = "filter", desc = "A message filter") String filter) throws Exception;
+
+   /**
+    * Expires the message corresponding to the specified message ID.
+    *
+    * @return {@code true} if the message was expired, {@code false} else
+    */
+   @Operation(desc = "Remove the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
+   boolean expireMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
+
+   /**
+    * Moves the message corresponding to the specified message ID to the specified other queue.
+    *
+    * @return {@code true} if the message was moved, {@code false} else
+    */
+   @Operation(desc = "Move the message corresponding to the given messageID to another queue. rejectDuplicate=false on this case", impact = MBeanOperationInfo.ACTION)
+   boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID,
+                       @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName) throws Exception;
+
+   /**
+    * Moves the message corresponding to the specified message ID to the specified other queue.
+    *
+    * @return {@code true} if the message was moved, {@code false} else
+    */
+   @Operation(desc = "Move the message corresponding to the given messageID to another queue", impact = MBeanOperationInfo.ACTION)
+   boolean moveMessage(@Parameter(name = "messageID", desc = "A message ID") long messageID,
+                       @Parameter(name = "otherQueueName", desc = "The name of the queue to move the message to") String otherQueueName,
+                       @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
+
+   /**
+    * Moves all the message corresponding to the specified filter  to the specified other queue.
+    * RejectDuplicates = false on this case
+    * <br>
+    * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
+    *
+    * @return the number of moved messages
+    */
+   @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages). RejectDuplicates=false on this case.", impact = MBeanOperationInfo.ACTION)
+   int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
+                    @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName) throws Exception;
+
+
+   /**
+    * Moves all the message corresponding to the specified filter  to the specified other queue.
+    * <br>
+    * Using {@code null} or an empty filter will move <em>all</em> messages from this queue.
+    *
+    * @return the number of moved messages
+    */
+   @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages)", impact = MBeanOperationInfo.ACTION)
+   int moveMessages(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
+                    @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName,
+                    @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
+
+   @Operation(desc = "Move the messages corresponding to the given filter (and returns the number of moved messages)", impact = MBeanOperationInfo.ACTION)
+   int moveMessages(@Parameter(name = "flushLimit", desc = "Limit to flush transactions during the operation to avoid OutOfMemory") int flushLimit,
+                    @Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
+                    @Parameter(name = "otherQueueName", desc = "The name of the queue to move the messages to") String otherQueueName,
+                    @Parameter(name = "rejectDuplicates", desc = "Reject messages identified as duplicate by the duplicate message") boolean rejectDuplicates) throws Exception;
+
+   /**
+    * Sends the message corresponding to the specified message ID to this queue's dead letter address.
+    *
+    * @return {@code true} if the message was sent to the dead letter address, {@code false} else
+    */
+   @Operation(desc = "Send the message corresponding to the given messageID to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
+   boolean sendMessageToDeadLetterAddress(@Parameter(name = "messageID", desc = "A message ID") long messageID) throws Exception;
+
+   /**
+    * Sends all the message corresponding to the specified filter to this queue's dead letter address.
+    * <br>
+    * Using {@code null} or an empty filter will send <em>all</em> messages from this queue.
+    *
+    * @return the number of sent messages
+    */
+   @Operation(desc = "Send the messages corresponding to the given filter to this queue's Dead Letter Address", impact = MBeanOperationInfo.ACTION)
+   int sendMessagesToDeadLetterAddress(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filterStr) throws Exception;
+
+   /**
+    * Changes the message's priority corresponding to the specified message ID to the specified priority.
+    *
+    * @param newPriority between 0 and 9 inclusive.
+    * @return {@code true} if the message priority was changed
+    */
+   @Operation(desc = "Change the priority of the message corresponding to the given messageID", impact = MBeanOperationInfo.ACTION)
+   boolean changeMessagePriority(@Parameter(name = "messageID", desc = "A message ID") long messageID,
+                                 @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
+
+   /**
+    * Changes the priority for all the message corresponding to the specified filter to the specified priority.
+    * <br>
+    * Using {@code null} or an empty filter will change <em>all</em> messages from this queue.
+    *
+    * @return the number of changed messages
+    */
+   @Operation(desc = "Change the priority of the messages corresponding to the given filter", impact = MBeanOperationInfo.ACTION)
+   int changeMessagesPriority(@Parameter(name = "filter", desc = "A message filter (can be empty)") String filter,
+                              @Parameter(name = "newPriority", desc = "the new priority (between 0 and 9)") int newPriority) throws Exception;
+
+   /**
+    * Lists the message counter for this queue.
+    */
+   @Operation(desc = "List the message counters", impact = MBeanOperationInfo.INFO)
+   String listMessageCounter() throws Exception;
+
+   /**
+    * Resets the message counter for this queue.
+    */
+   @Operation(desc = "Reset the message counters", impact = MBeanOperationInfo.INFO)
+   void resetMessageCounter() throws Exception;
+
+   /**
+    * Lists the message counter for this queue as a HTML table.
+    */
+   @Operation(desc = "List the message counters as HTML", impact = MBeanOperationInfo.INFO)
+   String listMessageCounterAsHTML() throws Exception;
+
+   /**
+    * Lists the message counter history for this queue.
+    */
+   @Operation(desc = "List the message counters history", impact = MBeanOperationInfo.INFO)
+   String listMessageCounterHistory() throws Exception;
+
+   /**
+    * Lists the message counter history for this queue as a HTML table.
+    */
+   @Operation(desc = "List the message counters history HTML", impact = MBeanOperationInfo.INFO)
+   String listMessageCounterHistoryAsHTML() throws Exception;
+
+   /**
+    * Pauses the queue. Messages are no longer delivered to its consumers.
+    */
+   @Operation(desc = "Pauses the Queue", impact = MBeanOperationInfo.ACTION)
+   void pause() throws Exception;
+
+   /**
+    * Resumes the queue. Messages are again delivered to its consumers.
+    */
+   @Operation(desc = "Resumes delivery of queued messages and gets the queue out of paused state.", impact = MBeanOperationInfo.ACTION)
+   void resume() throws Exception;
+
+   @Operation(desc = "List all the existent consumers on the Queue")
+   String listConsumersAsJSON() throws Exception;
+
+   /**
+    * Returns whether the queue is paused.
+    */
+   @Operation(desc = "Inspects if the queue is paused", impact = MBeanOperationInfo.INFO)
+   boolean isPaused() throws Exception;
+
+   /**
+    * Resets the MessagesAdded property
+    */
+   @Operation(desc = "Resets the MessagesAdded property", impact = MBeanOperationInfo.ACTION)
+   void resetMessagesAdded() throws Exception;
+
+   /**
+    * Resets the MessagesAdded property
+    */
+   @Operation(desc = "Resets the MessagesAcknowledged property", impact = MBeanOperationInfo.ACTION)
+   void resetMessagesAcknowledged() throws Exception;
+
+   /**
+    * it will flush one cycle on internal executors, so you would be sure that any pending tasks are done before you call
+    * any other measure.
+    * It is useful if you need the exact number of counts on a message
+    * @throws Exception
+    */
+   void flushExecutor();
+
+}


Mime
View raw message