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;