activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [1/2] activemq-artemis git commit: ARTEMIS-587 add more JSON JMX mgmt methods to core
Date Tue, 26 Jul 2016 15:40:02 GMT
Repository: activemq-artemis
Updated Branches:
  refs/heads/master 64e95b9b9 -> fbfbef52b


ARTEMIS-587 add more JSON JMX mgmt methods to core


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

Branch: refs/heads/master
Commit: 5d71ffc5e6e9275a966c66e2c2832e20d1ea361c
Parents: 64e95b9
Author: jbertram <jbertram@apache.org>
Authored: Fri Jul 22 17:37:27 2016 -0500
Committer: Clebert Suconic <clebertsuconic@apache.org>
Committed: Tue Jul 26 11:39:19 2016 -0400

----------------------------------------------------------------------
 .../core/management/ActiveMQServerControl.java  |  76 +++++++
 .../management/impl/JMSServerControlImpl.java   |  10 +-
 .../artemis/jms/server/JMSServerManager.java    |   2 +
 .../jms/server/impl/JMSServerManagerImpl.java   |   6 +
 .../impl/ActiveMQServerControlImpl.java         | 153 +++++++++++--
 .../artemis/core/server/ServerSession.java      |   2 +
 .../core/server/impl/ServerSessionImpl.java     |   5 +
 .../management/ActiveMQServerControlTest.java   | 224 ++++++++++++++++++-
 .../ActiveMQServerControlUsingCoreTest.java     |  20 ++
 9 files changed, 469 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/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 b2318ff..ab78ef9 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
@@ -604,6 +604,82 @@ public interface ActiveMQServerControl {
    String listProducersInfoAsJSON() throws Exception;
 
    /**
+    * Lists all the connections connected to this server.
+    * The returned String is a JSON string containing details about each connection, e.g.:
+    * <pre>
+    * [
+    *   {
+    *     "creationTime": 1469240429671,
+    *     "sessionCount": 1,
+    *     "implementation": "RemotingConnectionImpl",
+    *     "connectionID": "1648309901",
+    *     "clientAddress": "\/127.0.0.1:57649"
+    *   }
+    * ]
+    * </pre>
+    */
+   @Operation(desc = "List all connections as a JSON string")
+   String listConnectionsAsJSON() throws Exception;
+
+   /**
+    * Lists all the consumers which belongs to the connection specified by the connectionID.
+    * The returned String is a JSON string containing details about each consumer, e.g.:
+    * <pre>
+    * [
+    *   {
+    *     "filter": "color = 'RED'",
+    *     "queueName": "2ea5b050-28bf-4ee2-9b24-b73f5983192a",
+    *     "creationTime": 1469239602459,
+    *     "deliveringCount": 0,
+    *     "consumerID": 1,
+    *     "browseOnly": true,
+    *     "connectionID": "1963ece3-507a-11e6-94ff-e8b1fc439540",
+    *     "sessionID": "19676f55-507a-11e6-94ff-e8b1fc439540"
+    *   }
+    * ]
+    * </pre>
+    */
+   @Operation(desc = "List all consumers associated with a connection as a JSON string")
+   String listConsumersAsJSON(String connectionID) throws Exception;
+
+   /**
+    * Lists all the consumers connected to this server.
+    * The returned String is a JSON string containing details about each consumer, e.g.:
+    *<pre>
+    * [
+    *   {
+    *     "queueName": "fa87c64c-0a38-4697-8421-72e34d17429d",
+    *     "creationTime": 1469235956168,
+    *     "deliveringCount": 0,
+    *     "consumerID": 0,
+    *     "browseOnly": false,
+    *     "connectionID": "9c0d42e7-5071-11e6-9e29-e8b1fc439540",
+    *     "sessionID": "9c0d9109-5071-11e6-9e29-e8b1fc439540"
+    *   }
+    * ]
+    * </pre>
+    */
+   @Operation(desc = "List all consumers as a JSON string")
+   String listAllConsumersAsJSON() throws Exception;
+
+   /**
+    * Lists details about all the sessions for the specified connection ID.
+    * The returned String is a JSON string containing details about each session associated
with the specified ID, e.g.:
+    * <pre>
+    * [
+    *   {
+    *     "principal": "myUser",
+    *     "creationTime": 1469240773157,
+    *     "consumerCount": 0,
+    *     "sessionID": "d33d10db-507c-11e6-9e47-e8b1fc439540"
+    *   }
+    * ]
+    * </pre>
+    */
+   @Operation(desc = "List the sessions for the given connectionID as a JSON string", impact
= MBeanOperationInfo.INFO)
+   String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID")
String connectionID) throws Exception;
+
+   /**
     * Lists all the sessions IDs for the specified connection ID.
     */
    @Operation(desc = "List the sessions for the given connectionID", impact = MBeanOperationInfo.INFO)

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
index d7cced1..afb99af 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java
@@ -796,20 +796,12 @@ public class JMSServerControlImpl extends AbstractControl implements
JMSServerCo
 
       clearIO();
 
-      JsonArrayBuilder array = Json.createArrayBuilder();
       try {
-         List<ServerSession> sessions = server.getActiveMQServer().getSessions(connectionID);
-         for (ServerSession sess : sessions) {
-            JsonObjectBuilder obj = Json.createObjectBuilder()
-                  .add("sessionID", sess.getName())
-                  .add("creationTime", sess.getCreationTime());
-            array.add(obj);
-         }
+         return server.listSessionsAsJSON(connectionID);
       }
       finally {
          blockOnIO();
       }
-      return array.toString();
    }
 
    @Override

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
index 69314b6..d5f1878 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/JMSServerManager.java
@@ -292,6 +292,8 @@ public interface JMSServerManager extends ActiveMQComponent {
 
    String[] listSessions(String connectionID) throws Exception;
 
+   String listSessionsAsJSON(String connectionID) throws Exception;
+
    String listPreparedTransactionDetailsAsJSON() throws Exception;
 
    String listPreparedTransactionDetailsAsHTML() throws Exception;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
----------------------------------------------------------------------
diff --git a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
index 194c598..645fbc0 100644
--- a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
+++ b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/server/impl/JMSServerManagerImpl.java
@@ -1329,6 +1329,12 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
    }
 
    @Override
+   public String listSessionsAsJSON(final String connectionID) throws Exception {
+      checkInitialised();
+      return server.getActiveMQServerControl().listSessionsAsJSON(connectionID);
+   }
+
+   @Override
    public String listPreparedTransactionDetailsAsJSON() throws Exception {
       ResourceManager resourceManager = server.getResourceManager();
       Map<Xid, Long> xids = resourceManager.getPreparedTransactionsWithCreationTime();

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/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 e7c26aa..3a60bfa 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
@@ -16,18 +16,6 @@
  */
 package org.apache.activemq.artemis.core.management.impl;
 
-import java.text.DateFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicLong;
-
 import javax.json.Json;
 import javax.json.JsonArray;
 import javax.json.JsonArrayBuilder;
@@ -43,14 +31,25 @@ import javax.management.NotificationEmitter;
 import javax.management.NotificationFilter;
 import javax.management.NotificationListener;
 import javax.transaction.xa.Xid;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
 import org.apache.activemq.artemis.api.core.management.AddressControl;
 import org.apache.activemq.artemis.api.core.management.BridgeControl;
 import org.apache.activemq.artemis.api.core.management.CoreNotificationType;
 import org.apache.activemq.artemis.api.core.management.DivertControl;
-import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.core.config.BridgeConfiguration;
 import org.apache.activemq.artemis.core.config.Configuration;
@@ -67,10 +66,10 @@ import org.apache.activemq.artemis.core.postoffice.impl.LocalQueueBinding;
 import org.apache.activemq.artemis.core.remoting.server.RemotingService;
 import org.apache.activemq.artemis.core.security.CheckType;
 import org.apache.activemq.artemis.core.security.Role;
-import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
-import org.apache.activemq.artemis.core.server.Consumer;
 import org.apache.activemq.artemis.core.server.ActiveMQMessageBundle;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ActiveMQServerLogger;
+import org.apache.activemq.artemis.core.server.Consumer;
 import org.apache.activemq.artemis.core.server.JournalType;
 import org.apache.activemq.artemis.core.server.Queue;
 import org.apache.activemq.artemis.core.server.ServerConsumer;
@@ -1360,6 +1359,130 @@ public class ActiveMQServerControlImpl extends AbstractControl implements
Active
    }
 
    @Override
+   public String listConnectionsAsJSON() throws Exception {
+      checkStarted();
+
+      clearIO();
+
+      try {
+         JsonArrayBuilder array = Json.createArrayBuilder();
+
+         Set<RemotingConnection> connections = server.getRemotingService().getConnections();
+
+         for (RemotingConnection connection : connections) {
+            JsonObjectBuilder obj = Json.createObjectBuilder()
+               .add("connectionID", connection.getID().toString())
+               .add("clientAddress", connection.getRemoteAddress())
+               .add("creationTime", connection.getCreationTime())
+               .add("implementation", connection.getClass().getSimpleName())
+               .add("sessionCount", server.getSessions(connection.getID().toString()).size());
+            array.add(obj);
+         }
+         return array.build().toString();
+      }
+      finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
+   public String listSessionsAsJSON(final String connectionID) throws Exception {
+      checkStarted();
+
+      clearIO();
+
+      JsonArrayBuilder array = Json.createArrayBuilder();
+      try {
+         List<ServerSession> sessions = server.getSessions(connectionID);
+         for (ServerSession sess : sessions) {
+            JsonObjectBuilder obj = Json.createObjectBuilder()
+               .add("sessionID", sess.getName())
+               .add("creationTime", sess.getCreationTime())
+               .add("principal", sess.getValidatedUser())
+               .add("consumerCount", sess.getServerConsumers().size());
+            array.add(obj);
+         }
+      }
+      finally {
+         blockOnIO();
+      }
+      return array.build().toString();
+   }
+
+   @Override
+   public String listConsumersAsJSON(String connectionID) throws Exception {
+      checkStarted();
+
+      clearIO();
+
+      try {
+         JsonArrayBuilder array = Json.createArrayBuilder();
+
+         Set<RemotingConnection> connections = server.getRemotingService().getConnections();
+         for (RemotingConnection connection : connections) {
+            if (connectionID.equals(connection.getID().toString())) {
+               List<ServerSession> sessions = server.getSessions(connectionID);
+               for (ServerSession session : sessions) {
+                  Set<ServerConsumer> consumers = session.getServerConsumers();
+                  for (ServerConsumer consumer : consumers) {
+                     JsonObject obj = toJSONObject(consumer);
+                     if (obj != null) {
+                        array.add(obj);
+                     }
+                  }
+               }
+            }
+         }
+         return array.build().toString();
+      }
+      finally {
+         blockOnIO();
+      }
+   }
+
+   @Override
+   public String listAllConsumersAsJSON() throws Exception {
+      checkStarted();
+
+      clearIO();
+
+      try {
+         JsonArrayBuilder array = Json.createArrayBuilder();
+
+         Set<ServerSession> sessions = server.getSessions();
+         for (ServerSession session : sessions) {
+            Set<ServerConsumer> consumers = session.getServerConsumers();
+            for (ServerConsumer consumer : consumers) {
+               JsonObject obj = toJSONObject(consumer);
+               if (obj != null) {
+                  array.add(obj);
+               }
+            }
+         }
+         return array.build().toString();
+      }
+      finally {
+         blockOnIO();
+      }
+   }
+
+   private JsonObject toJSONObject(ServerConsumer consumer) throws Exception {
+      JsonObjectBuilder obj = Json.createObjectBuilder()
+         .add("consumerID", consumer.getID())
+         .add("connectionID", consumer.getConnectionID().toString())
+         .add("sessionID", consumer.getSessionID())
+         .add("queueName", consumer.getQueue().getName().toString())
+         .add("browseOnly", consumer.isBrowseOnly())
+         .add("creationTime", consumer.getCreationTime())
+         .add("deliveringCount", consumer.getDeliveringMessages().size());
+      if (consumer.getFilter() != null) {
+         obj.add("filter", consumer.getFilter().getFilterString().toString());
+      }
+
+      return obj.build();
+   }
+
+   @Override
    public Object[] getConnectors() throws Exception {
       checkStarted();
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
index 2b90cbc..953de1f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/ServerSession.java
@@ -186,4 +186,6 @@ public interface ServerSession extends SecurityAuth {
                           SimpleString filterString) throws Exception;
 
    List<MessageReference> getInTXMessagesForConsumer(long consumerId);
+
+   String getValidatedUser();
 }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
index 79154f7..34add7d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/ServerSessionImpl.java
@@ -1424,6 +1424,11 @@ public class ServerSessionImpl implements ServerSession, FailureListener
{
    }
 
    @Override
+   public String getValidatedUser() {
+      return validatedUser;
+   }
+
+   @Override
    public String toString() {
       StringBuffer buffer = new StringBuffer();
       if (this.metaData != null) {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
index 7de651d..6731d27 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/ActiveMQServerControlTest.java
@@ -20,8 +20,13 @@ import javax.json.JsonArray;
 import javax.json.JsonObject;
 import javax.transaction.xa.XAResource;
 import javax.transaction.xa.Xid;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.UUID;
 
+import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.TransportConfiguration;
 import org.apache.activemq.artemis.api.core.client.ActiveMQClient;
@@ -35,19 +40,24 @@ import org.apache.activemq.artemis.api.core.management.ActiveMQServerControl;
 import org.apache.activemq.artemis.api.core.management.AddressSettingsInfo;
 import org.apache.activemq.artemis.api.core.management.BridgeControl;
 import org.apache.activemq.artemis.api.core.management.DivertControl;
-import org.apache.activemq.artemis.api.core.JsonUtil;
 import org.apache.activemq.artemis.api.core.management.ObjectNameBuilder;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.api.core.management.RoleInfo;
+import org.apache.activemq.artemis.core.client.impl.ClientSessionImpl;
 import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.SecurityConfiguration;
 import org.apache.activemq.artemis.core.messagecounter.impl.MessageCounterManagerImpl;
 import org.apache.activemq.artemis.core.remoting.impl.invm.InVMAcceptorFactory;
 import org.apache.activemq.artemis.core.remoting.impl.invm.TransportConstants;
+import org.apache.activemq.artemis.core.security.Role;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.core.server.ActiveMQServers;
 import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
 import org.apache.activemq.artemis.core.transaction.impl.XidImpl;
 import org.apache.activemq.artemis.jlibaio.LibaioContext;
+import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
+import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule;
+import org.apache.activemq.artemis.tests.integration.IntegrationTestLogger;
 import org.apache.activemq.artemis.utils.RandomUtil;
 import org.apache.activemq.artemis.utils.UUIDGenerator;
 import org.junit.Assert;
@@ -402,7 +412,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
       String addressMatch = "test.#";
       String exactAddress = "test.whatever";
 
-      assertEquals(0, serverControl.getRoles(addressMatch).length);
+      assertEquals(1, serverControl.getRoles(addressMatch).length);
       serverControl.addSecuritySettings(addressMatch, "foo", "foo, bar", "foo", "bar", "foo,
bar", "", "", "bar");
 
       // Restart the server. Those settings should be persisted
@@ -443,7 +453,7 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
       assertTrue(barRole.isBrowse());
 
       serverControl.removeSecuritySettings(addressMatch);
-      assertEquals(0, serverControl.getRoles(exactAddress).length);
+      assertEquals(1, serverControl.getRoles(exactAddress).length);
    }
 
    @Test
@@ -1069,6 +1079,198 @@ public class ActiveMQServerControlTest extends ManagementTestBase
{
       locator.close();
    }
 
+   @Test
+   public void testListConnectionsAsJSON() throws Exception {
+      ActiveMQServerControl serverControl = createManagementControl();
+      List<ClientSessionFactory> factories = new ArrayList<>();
+
+      ServerLocator locator = createInVMNonHALocator();
+      factories.add(createSessionFactory(locator));
+      factories.add(createSessionFactory(locator));
+      addClientSession(factories.get(1).createSession());
+
+      String jsonString = serverControl.listConnectionsAsJSON();
+      IntegrationTestLogger.LOGGER.info(jsonString);
+      Assert.assertNotNull(jsonString);
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(2, array.size());
+      JsonObject first;
+      JsonObject second;
+      if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue())
{
+         first = array.getJsonObject(0);
+         second = array.getJsonObject(1);
+      }
+      else {
+         first = array.getJsonObject(1);
+         second = array.getJsonObject(0);
+      }
+
+      Assert.assertTrue(first.getString("connectionID").length() > 0);
+      Assert.assertTrue(first.getString("clientAddress").length() > 0);
+      Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(0, first.getJsonNumber("sessionCount").longValue());
+
+      Assert.assertTrue(second.getString("connectionID").length() > 0);
+      Assert.assertTrue(second.getString("clientAddress").length() > 0);
+      Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(1, second.getJsonNumber("sessionCount").longValue());
+   }
+
+   @Test
+   public void testListConsumersAsJSON() throws Exception {
+      SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+      final String filter = "x = 1";
+      ActiveMQServerControl serverControl = createManagementControl();
+
+      ServerLocator locator = createInVMNonHALocator();
+      ClientSessionFactory factory = createSessionFactory(locator);
+      ClientSession session = addClientSession(factory.createSession());
+      server.createQueue(queueName, queueName, null, false, false);
+      addClientConsumer(session.createConsumer(queueName));
+      addClientConsumer(session.createConsumer(queueName, SimpleString.toSimpleString(filter),
true));
+
+      String jsonString = serverControl.listConsumersAsJSON(factory.getConnection().getID().toString());
+      IntegrationTestLogger.LOGGER.info(jsonString);
+      Assert.assertNotNull(jsonString);
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(2, array.size());
+      JsonObject first;
+      JsonObject second;
+      if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue())
{
+         first = array.getJsonObject(0);
+         second = array.getJsonObject(1);
+      }
+      else {
+         first = array.getJsonObject(1);
+         second = array.getJsonObject(0);
+      }
+
+      Assert.assertNotNull(first.getJsonNumber("consumerID").longValue());
+      Assert.assertTrue(first.getString("connectionID").length() > 0);
+      Assert.assertEquals(factory.getConnection().getID().toString(), first.getString("connectionID"));
+      Assert.assertTrue(first.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session).getName(), first.getString("sessionID"));
+      Assert.assertTrue(first.getString("queueName").length() > 0);
+      Assert.assertEquals(queueName.toString(), first.getString("queueName"));
+      Assert.assertEquals(false, first.getBoolean("browseOnly"));
+      Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(0, first.getJsonNumber("deliveringCount").longValue());
+
+      Assert.assertNotNull(second.getJsonNumber("consumerID").longValue());
+      Assert.assertTrue(second.getString("connectionID").length() > 0);
+      Assert.assertEquals(factory.getConnection().getID().toString(), second.getString("connectionID"));
+      Assert.assertTrue(second.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session).getName(), second.getString("sessionID"));
+      Assert.assertTrue(second.getString("queueName").length() > 0);
+      Assert.assertEquals(queueName.toString(), second.getString("queueName"));
+      Assert.assertEquals(true, second.getBoolean("browseOnly"));
+      Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(0, second.getJsonNumber("deliveringCount").longValue());
+      Assert.assertTrue(second.getString("filter").length() > 0);
+      Assert.assertEquals(filter, second.getString("filter"));
+   }
+
+   @Test
+   public void testListAllConsumersAsJSON() throws Exception {
+      SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+      ActiveMQServerControl serverControl = createManagementControl();
+
+      ServerLocator locator = createInVMNonHALocator();
+      ClientSessionFactory factory = createSessionFactory(locator);
+      ClientSession session = addClientSession(factory.createSession());
+
+      ServerLocator locator2 = createInVMNonHALocator();
+      ClientSessionFactory factory2 = createSessionFactory(locator2);
+      ClientSession session2 = addClientSession(factory2.createSession());
+
+      server.createQueue(queueName, queueName, null, false, false);
+
+      addClientConsumer(session.createConsumer(queueName));
+      addClientConsumer(session2.createConsumer(queueName));
+
+      String jsonString = serverControl.listAllConsumersAsJSON();
+      IntegrationTestLogger.LOGGER.info(jsonString);
+      Assert.assertNotNull(jsonString);
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(2, array.size());
+      JsonObject first;
+      JsonObject second;
+      if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue())
{
+         first = array.getJsonObject(0);
+         second = array.getJsonObject(1);
+      }
+      else {
+         first = array.getJsonObject(1);
+         second = array.getJsonObject(0);
+      }
+
+      Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertNotNull(first.getJsonNumber("consumerID").longValue());
+      Assert.assertTrue(first.getString("connectionID").length() > 0);
+      Assert.assertEquals(factory.getConnection().getID().toString(), first.getString("connectionID"));
+      Assert.assertTrue(first.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session).getName(), first.getString("sessionID"));
+      Assert.assertTrue(first.getString("queueName").length() > 0);
+      Assert.assertEquals(queueName.toString(), first.getString("queueName"));
+      Assert.assertEquals(false, first.getBoolean("browseOnly"));
+      Assert.assertEquals(0, first.getJsonNumber("deliveringCount").longValue());
+
+      Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertNotNull(second.getJsonNumber("consumerID").longValue());
+      Assert.assertTrue(second.getString("connectionID").length() > 0);
+      Assert.assertEquals(factory2.getConnection().getID().toString(), second.getString("connectionID"));
+      Assert.assertTrue(second.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session2).getName(), second.getString("sessionID"));
+      Assert.assertTrue(second.getString("queueName").length() > 0);
+      Assert.assertEquals(queueName.toString(), second.getString("queueName"));
+      Assert.assertEquals(false, second.getBoolean("browseOnly"));
+      Assert.assertEquals(0, second.getJsonNumber("deliveringCount").longValue());
+   }
+
+   @Test
+   public void testListSessionsAsJSON() throws Exception {
+      SimpleString queueName = new SimpleString(UUID.randomUUID().toString());
+      server.createQueue(queueName, queueName, null, false, false);
+      ActiveMQServerControl serverControl = createManagementControl();
+
+      ServerLocator locator = createInVMNonHALocator();
+      ClientSessionFactory factory = createSessionFactory(locator);
+      ClientSession session1 = addClientSession(factory.createSession());
+      Thread.sleep(5);
+      ClientSession session2 = addClientSession(factory.createSession("myUser", "myPass",
false, false, false, false, 0));
+      session2.createConsumer(queueName);
+
+      String jsonString = serverControl.listSessionsAsJSON(factory.getConnection().getID().toString());
+      IntegrationTestLogger.LOGGER.info(jsonString);
+      Assert.assertNotNull(jsonString);
+      JsonArray array = JsonUtil.readJsonArray(jsonString);
+      Assert.assertEquals(2, array.size());
+      JsonObject first;
+      JsonObject second;
+      if (array.getJsonObject(0).getJsonNumber("creationTime").longValue() < array.getJsonObject(1).getJsonNumber("creationTime").longValue())
{
+         first = array.getJsonObject(0);
+         second = array.getJsonObject(1);
+      }
+      else {
+         first = array.getJsonObject(1);
+         second = array.getJsonObject(0);
+      }
+
+      Assert.assertTrue(first.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session1).getName(), first.getString("sessionID"));
+      Assert.assertTrue(first.getString("principal").length() > 0);
+      Assert.assertEquals("guest", first.getString("principal"));
+      Assert.assertTrue(first.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(0, first.getJsonNumber("consumerCount").longValue());
+
+      Assert.assertTrue(second.getString("sessionID").length() > 0);
+      Assert.assertEquals(((ClientSessionImpl)session2).getName(), second.getString("sessionID"));
+      Assert.assertTrue(second.getString("principal").length() > 0);
+      Assert.assertEquals("myUser", second.getString("principal"));
+      Assert.assertTrue(second.getJsonNumber("creationTime").longValue() > 0);
+      Assert.assertEquals(1, second.getJsonNumber("consumerCount").longValue());
+   }
+
    protected void scaleDown(ScaleDownHandler handler) throws Exception {
       SimpleString address = new SimpleString("testQueue");
       HashMap<String, Object> params = new HashMap<>();
@@ -1119,9 +1321,21 @@ public class ActiveMQServerControlTest extends ManagementTestBase {
 
       connectorConfig = new TransportConfiguration(INVM_CONNECTOR_FACTORY);
 
-      conf = createDefaultInVMConfig().setJMXManagementEnabled(true).addConnectorConfiguration(connectorConfig.getName(),
connectorConfig);
-      server = addServer(ActiveMQServers.newActiveMQServer(conf, mbeanServer, true));
+      conf = createDefaultNettyConfig().setJMXManagementEnabled(true).addConnectorConfiguration(connectorConfig.getName(),
connectorConfig);
+      conf.setSecurityEnabled(true);
+      SecurityConfiguration securityConfiguration = new SecurityConfiguration();
+      securityConfiguration.addUser("guest", "guest");
+      securityConfiguration.addUser("myUser", "myPass");
+      securityConfiguration.addRole("guest", "guest");
+      securityConfiguration.addRole("myUser", "guest");
+      securityConfiguration.setDefaultUser("guest");
+      ActiveMQJAASSecurityManager securityManager = new ActiveMQJAASSecurityManager(InVMLoginModule.class.getName(),
securityConfiguration);
+      server = addServer(ActiveMQServers.newActiveMQServer(conf, mbeanServer, securityManager,
true));
       server.start();
+
+      HashSet<Role> role = new HashSet<>();
+      role.add(new Role("guest", true, true, true, true, true, true, true, true));
+      server.getSecurityRepository().addMatch("#", role);
    }
 
    protected ActiveMQServerControl createManagementControl() throws Exception {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/5d71ffc5/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 2bd2a8b..498c31f 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
@@ -705,6 +705,26 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
          public String listProducersInfoAsJSON() throws Exception {
             return (String) proxy.invokeOperation("listProducersInfoAsJSON");
          }
+
+         @Override
+         public String listConsumersAsJSON(String connectionID) throws Exception {
+            return (String) proxy.invokeOperation("listConsumersAsJSON");
+         }
+
+         @Override
+         public String listAllConsumersAsJSON() throws Exception {
+            return (String) proxy.invokeOperation("listAllConsumersAsJSON");
+         }
+
+         @Override
+         public String listConnectionsAsJSON() throws Exception {
+            return (String) proxy.invokeOperation("listConnectionsAsJSON");
+         }
+
+         @Override
+         public String listSessionsAsJSON(@Parameter(desc = "a connection ID", name = "connectionID")
String connectionID) throws Exception {
+            return (String) proxy.invokeOperation("listSessionsAsJSON");
+         }
       };
    }
 


Mime
View raw message