You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by mi...@apache.org on 2017/12/12 13:17:38 UTC

[2/4] activemq-artemis git commit: NO-JIRA fix fieldname regression

NO-JIRA fix fieldname regression

Fix field name regression, but ensure predicate and sorting still works.
Remove reflection introduced by new sorting, and rely on field mapping.

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

Branch: refs/heads/master
Commit: f08da813a18d5152fd7e4e98037c127e77f15ca4
Parents: b39c556
Author: Michael André Pearce <mi...@me.com>
Authored: Mon Dec 11 06:47:08 2017 +0000
Committer: Michael Pearce <mi...@me.com>
Committed: Tue Dec 12 13:17:02 2017 +0000

----------------------------------------------------------------------
 .../impl/view/ActiveMQAbstractView.java         | 39 +++------------
 .../core/management/impl/view/AddressView.java  | 30 ++++++++++++
 .../management/impl/view/ConnectionView.java    | 35 +++++++++++++-
 .../core/management/impl/view/ConsumerView.java | 37 +++++++++++++-
 .../core/management/impl/view/ProducerView.java | 38 +++++++++++++++
 .../core/management/impl/view/QueueView.java    | 51 ++++++++++++++++++++
 .../core/management/impl/view/SessionView.java  | 20 ++++++++
 7 files changed, 217 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java
index f4e44f7..29f5fcf 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ActiveMQAbstractView.java
@@ -53,8 +53,6 @@ public abstract class ActiveMQAbstractView<T> {
 
    protected String options;
 
-   private Method getter;
-
    public ActiveMQAbstractView() {
       this.sortColumn = getDefaultOrderColumn();
       this.sortOrder = "asc";
@@ -98,29 +96,18 @@ public abstract class ActiveMQAbstractView<T> {
       return predicate;
    }
 
-   private Method getGetter() {
-      if (getter == null) {
-         getter = findGetterMethod(getClassT(), sortColumn);
-      }
-      return getter;
-   }
-
    public Ordering<T> getOrdering() {
       return new Ordering<T>() {
-
          @Override
          public int compare(T left, T right) {
-            Method getter = getGetter();
             try {
-               if (getter != null) {
-                  Object leftValue = getter.invoke(left);
-                  Object rightValue = getter.invoke(right);
-                  if (leftValue instanceof Comparable && rightValue instanceof Comparable) {
-                     if (sortOrder.equals("desc")) {
-                        return ((Comparable) rightValue).compareTo(leftValue);
-                     } else {
-                        return ((Comparable) leftValue).compareTo(rightValue);
-                     }
+               Object leftValue = getField(left, sortColumn);;
+               Object rightValue = getField(right, sortColumn);;
+               if (leftValue instanceof Comparable && rightValue instanceof Comparable) {
+                  if (sortOrder.equals("desc")) {
+                     return ((Comparable) rightValue).compareTo(leftValue);
+                  } else {
+                     return ((Comparable) leftValue).compareTo(rightValue);
                   }
                }
                return 0;
@@ -132,17 +119,7 @@ public abstract class ActiveMQAbstractView<T> {
       };
    }
 
-   public static Method findGetterMethod(Class clazz, String sortColumn) {
-      String name = "get" + Character.toUpperCase(sortColumn.charAt(0)) + sortColumn.substring(1);
-      Method[] methods = clazz.getMethods();
-      for (Method method : methods) {
-         Class<?>[] params = method.getParameterTypes();
-         if (method.getName().equals(name) && params.length == 0) {
-            return method;
-         }
-      }
-      return null;
-   }
+   abstract Object getField(T t, String fieldName);
 
    public void setOptions(String options) {
       JsonObject json = JsonUtil.readJsonObject(options);

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java
index ea24e78..58bf52d 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/AddressView.java
@@ -17,9 +17,16 @@
 package org.apache.activemq.artemis.core.management.impl.view;
 
 import javax.json.JsonObjectBuilder;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.activemq.artemis.core.management.impl.view.predicate.AddressFilterPredicate;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.core.server.impl.AddressInfo;
+import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.utils.JsonLoader;
 
 public class AddressView extends ActiveMQAbstractView<AddressInfo> {
@@ -56,6 +63,29 @@ public class AddressView extends ActiveMQAbstractView<AddressInfo> {
       return obj;
    }
 
+   public Object getField(AddressInfo address, String fieldName) {
+      if (address == null) {
+         return null;
+      }
+
+      switch (fieldName) {
+         case "id":
+            return address.getId();
+         case "name":
+            return address.getName();
+         case "routingTypes":
+            return address.getRoutingTypes();
+         case "queueCount":
+            try {
+               return server.bindingQuery(address.getName()).getQueueNames().size();
+            } catch (Exception e) {
+               return 0;
+            }
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java
index 94ee487..1baf039 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConnectionView.java
@@ -24,6 +24,7 @@ import java.util.Set;
 
 import org.apache.activemq.artemis.core.management.impl.view.predicate.ConnectionFilterPredicate;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ServerConsumer;
 import org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
 import org.apache.activemq.artemis.utils.JsonLoader;
@@ -61,13 +62,45 @@ public class ConnectionView extends ActiveMQAbstractView<RemotingConnection> {
          .add("remoteAddress", toString(connection.getRemoteAddress()))
          .add("users", StringUtil.joinStringList(users, ","))
          .add("creationTime", new Date(connection.getCreationTime()).toString())
-         .add("implementation", toString(toString(connection.getClass().getSimpleName())))
+         .add("implementation", toString(connection.getClass().getSimpleName()))
          .add("protocol", toString(connection.getProtocolName()))
          .add("clientID", toString(connection.getClientID()))
          .add("localAddress", toString(connection.getTransportLocalAddress()))
          .add("sessionCount", server.getSessions(connection.getID().toString()).size());
    }
 
+   public Object getField(RemotingConnection connection, String fieldName) {
+      List<ServerSession> sessions = server.getSessions(connection.getID().toString());
+
+      switch (fieldName) {
+         case "connectionID":
+            return connection.getID();
+         case "remoteAddress":
+            return connection.getRemoteAddress();
+         case "users":
+            Set<String> users = new HashSet<>();
+            for (ServerSession session : sessions) {
+               String username = session.getUsername() == null ? "" : session.getUsername();
+               users.add(username);
+            }
+            return users;
+         case "creationTime":
+            return new Date(connection.getCreationTime());
+         case "implementation":
+            return connection.getClass().getSimpleName();
+         case "protocol":
+            return connection.getProtocolName();
+         case "clientID":
+            return connection.getClientID();
+         case "localAddress":
+            return connection.getTransportLocalAddress();
+         case "sessionCount":
+            return sessions.size();
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
index 4b1feb3..1eac72f 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ConsumerView.java
@@ -22,6 +22,7 @@ import java.util.Date;
 import org.apache.activemq.artemis.core.management.impl.view.predicate.ConsumerFilterPredicate;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.core.server.ServerConsumer;
+import org.apache.activemq.artemis.core.server.ServerProducer;
 import org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.utils.JsonLoader;
 
@@ -58,13 +59,47 @@ public class ConsumerView extends ActiveMQAbstractView<ServerConsumer> {
          .add("protocol", toString(consumer.getConnectionProtocolName()))
          .add("queue", toString(consumer.getQueueName()))
          .add("queueType", toString(consumer.getQueueType()).toLowerCase())
-         .add("address", toString(consumer.getQueueAddress().toString()))
+         .add("address", toString(consumer.getQueueAddress()))
          .add("localAddress", toString(consumer.getConnectionLocalAddress()))
          .add("remoteAddress", toString(consumer.getConnectionRemoteAddress()))
          .add("creationTime", new Date(consumer.getCreationTime()).toString());
       return obj;
    }
 
+   public Object getField(ServerConsumer consumer, String fieldName) {
+      ServerSession session = server.getSessionByID(consumer.getSessionID());
+
+      //if session is not available then consumer is not in valid state - ignore
+      if (session == null) {
+         return null;
+      }
+
+      switch (fieldName) {
+         case "id":
+            return consumer.getSequentialID();
+         case "session":
+            return consumer.getSessionName();
+         case "user":
+            return session.getUsername();
+         case "clientID":
+            return consumer.getConnectionClientID();
+         case "protocol":
+            return consumer.getConnectionProtocolName();
+         case "queue":
+            return consumer.getQueueName();
+         case "queueType":
+            return consumer.getQueueType();
+         case "localAddress":
+            return consumer.getConnectionLocalAddress();
+         case "remoteAddress":
+            return consumer.getConnectionRemoteAddress();
+         case "creationTime":
+            return new Date(consumer.getCreationTime());
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
index e14ab6d..af19d74 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/ProducerView.java
@@ -44,6 +44,12 @@ public class ProducerView extends ActiveMQAbstractView<ServerProducer> {
    @Override
    public JsonObjectBuilder toJson(ServerProducer producer) {
       ServerSession session = server.getSessionByID(producer.getSessionID());
+
+      //if session is not available then consumer is not in valid state - ignore
+      if (session == null) {
+         return null;
+      }
+
       JsonObjectBuilder obj = JsonLoader.createObjectBuilder().add("id", toString(producer.getID()))
          .add("session", toString(session.getName()))
          .add("clientID", toString(session.getRemotingConnection().getClientID()))
@@ -56,6 +62,38 @@ public class ProducerView extends ActiveMQAbstractView<ServerProducer> {
       return obj;
    }
 
+   public Object getField(ServerProducer producer, String fieldName) {
+      ServerSession session = server.getSessionByID(producer.getSessionID());
+
+      //if session is not available then consumer is not in valid state - ignore
+      if (session == null) {
+         return null;
+      }
+
+      switch (fieldName) {
+         case "id":
+            return producer.getID();
+         case "session":
+            return session.getName();
+         case "user":
+            return session.getUsername();
+         case "clientID":
+            return session.getRemotingConnection().getClientID();
+         case "protocol":
+            return session.getRemotingConnection().getProtocolName();
+         case "address":
+            return producer.getAddress() != null ? producer.getAddress() : session.getDefaultAddress();
+         case "localAddress":
+            return session.getRemotingConnection().getTransportConnection().getLocalAddress();
+         case "remoteAddress":
+            return session.getRemotingConnection().getTransportConnection().getRemoteAddress();
+         case "creationTime":
+            return producer.getCreationTime();
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
index 539ded9..1f8ac0a 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/QueueView.java
@@ -18,11 +18,14 @@ package org.apache.activemq.artemis.core.management.impl.view;
 
 import javax.json.JsonObjectBuilder;
 
+import java.util.Date;
+
 import org.apache.activemq.artemis.api.core.SimpleString;
 import org.apache.activemq.artemis.api.core.management.QueueControl;
 import org.apache.activemq.artemis.core.management.impl.view.predicate.QueueFilterPredicate;
 import org.apache.activemq.artemis.core.server.ActiveMQServer;
 import org.apache.activemq.artemis.core.server.Queue;
+import org.apache.activemq.artemis.core.server.ServerSession;
 import org.apache.activemq.artemis.utils.JsonLoader;
 
 public class QueueView extends ActiveMQAbstractView<QueueControl> {
@@ -65,6 +68,54 @@ public class QueueView extends ActiveMQAbstractView<QueueControl> {
       return obj;
    }
 
+   public Object getField(QueueControl queue, String fieldName) {
+      Queue q = server.locateQueue(new SimpleString(queue.getName()));
+      switch (fieldName) {
+         case "id":
+            return queue.getID();
+         case "name":
+            return queue.getName();
+         case "address":
+            return queue.getAddress();
+         case "filter":
+            return queue.getFilter();
+         case "rate":
+            return q.getRate();
+         case "durable":
+            return queue.isDurable();
+         case "paused":
+            return q.isPaused();
+         case "temporary":
+            return queue.isTemporary();
+         case "purgeOnNoConsumers":
+            return queue.isPurgeOnNoConsumers();
+         case "consumerCount":
+            return queue.getConsumerCount();
+         case "maxConsumers":
+            return queue.getMaxConsumers();
+         case "autoCreated":
+            return q.isAutoCreated();
+         case "user":
+            return q.getUser();
+         case "routingType":
+            return queue.getRoutingType();
+         case "messagesAdded":
+            return queue.getMessagesAdded();
+         case "messageCount":
+            return queue.getMessageCount();
+         case "messagesAcked":
+            return queue.getMessagesAcknowledged();
+         case "deliveringCount":
+            return queue.getDeliveringCount();
+         case "messagesKilled":
+            return queue.getMessagesKilled();
+         case "deliverDeliver":
+            return q.isDirectDeliver();
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/f08da813/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
index 6a93864..35fc8b8 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/view/SessionView.java
@@ -21,6 +21,7 @@ import java.util.Date;
 
 import org.apache.activemq.artemis.core.management.impl.view.predicate.SessionFilterPredicate;
 import org.apache.activemq.artemis.core.server.ServerSession;
+import org.apache.activemq.artemis.core.server.impl.AddressInfo;
 import org.apache.activemq.artemis.utils.JsonLoader;
 
 public class SessionView extends ActiveMQAbstractView<ServerSession> {
@@ -48,6 +49,25 @@ public class SessionView extends ActiveMQAbstractView<ServerSession> {
       return obj;
    }
 
+   public Object getField(ServerSession session, String fieldName) {
+      switch (fieldName) {
+         case "id":
+            return session.getName();
+         case "user":
+            return session.getUsername();
+         case "creationTime":
+            return new Date(session.getCreationTime());
+         case "consumerCount":
+            return session.getConsumerCount();
+         case "producerCount":
+            return session.getProducerCount();
+         case "connectionID":
+            return session.getConnectionID();
+         default:
+            throw new IllegalArgumentException("Unsupported field, " + fieldName);
+      }
+   }
+
    @Override
    public String getDefaultOrderColumn() {
       return defaultSortColumn;