Repository: activemq-artemis
Updated Branches:
  refs/heads/master d83758e1a -> 7f0c9d022


ARTEMIS-1666 refactor to avoid duplicate code and fix bug


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

Branch: refs/heads/master
Commit: c26c970ddca54882d8de14cf6e0fba502cf777fb
Parents: d83758e
Author: Justin Bertram <[email protected]>
Authored: Mon Feb 12 13:18:57 2018 -0600
Committer: Clebert Suconic <[email protected]>
Committed: Wed Feb 21 13:23:06 2018 -0500

----------------------------------------------------------------------
 .../jms/server/impl/JMSServerManagerImpl.java   | 107 +------------------
 .../jms/transaction/JMSTransactionDetail.java   |   2 +-
 .../impl/ActiveMQServerControlImpl.java         |  13 ++-
 .../transaction/TransactionDetailFactory.java   |  24 +++++
 .../transaction/impl/CoreTransactionDetail.java |   2 +-
 5 files changed, 39 insertions(+), 109 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c26c970d/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 420b22b..69d4b90 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
@@ -16,11 +16,7 @@
  */
 package org.apache.activemq.artemis.jms.server.impl;
 
-import javax.json.JsonArray;
-import javax.json.JsonArrayBuilder;
-import javax.json.JsonObject;
 import javax.naming.NamingException;
-import javax.transaction.xa.Xid;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
@@ -28,14 +24,11 @@ import java.net.InetAddress;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 
@@ -64,9 +57,6 @@ import 
org.apache.activemq.artemis.core.server.management.Notification;
 import org.apache.activemq.artemis.core.server.reload.ReloadCallback;
 import org.apache.activemq.artemis.core.server.reload.ReloadManager;
 import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
-import org.apache.activemq.artemis.core.transaction.ResourceManager;
-import org.apache.activemq.artemis.core.transaction.Transaction;
-import org.apache.activemq.artemis.core.transaction.TransactionDetail;
 import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
 import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
 import org.apache.activemq.artemis.jms.client.ActiveMQQueue;
@@ -90,7 +80,6 @@ import 
org.apache.activemq.artemis.jms.server.config.impl.FileJMSConfiguration;
 import org.apache.activemq.artemis.jms.server.management.JMSNotificationType;
 import org.apache.activemq.artemis.jms.transaction.JMSTransactionDetail;
 import org.apache.activemq.artemis.spi.core.naming.BindingRegistry;
-import org.apache.activemq.artemis.utils.JsonLoader;
 import org.apache.activemq.artemis.utils.SelectorTranslator;
 import org.apache.activemq.artemis.utils.TimeAndCounterIDGenerator;
 import org.apache.activemq.artemis.utils.XMLUtil;
@@ -1337,104 +1326,12 @@ public class JMSServerManagerImpl implements 
JMSServerManager, ActivateCallback
 
    @Override
    public String listPreparedTransactionDetailsAsJSON() throws Exception {
-      ResourceManager resourceManager = server.getResourceManager();
-      Map<Xid, Long> xids = 
resourceManager.getPreparedTransactionsWithCreationTime();
-      if (xids == null || xids.size() == 0) {
-         return "";
-      }
-
-      ArrayList<Entry<Xid, Long>> xidsSortedByCreationTime = new 
ArrayList<>(xids.entrySet());
-      Collections.sort(xidsSortedByCreationTime, new Comparator<Entry<Xid, 
Long>>() {
-         @Override
-         public int compare(final Entry<Xid, Long> entry1, final Entry<Xid, 
Long> entry2) {
-            // sort by creation time, oldest first
-            return (int) (entry1.getValue() - entry2.getValue());
-         }
-      });
-
-      JsonArrayBuilder txDetailListJson = JsonLoader.createArrayBuilder();
-      for (Map.Entry<Xid, Long> entry : xidsSortedByCreationTime) {
-         Xid xid = entry.getKey();
-         Transaction tx = resourceManager.getTransaction(xid);
-         if (tx == null) {
-            continue;
-         }
-         TransactionDetail detail = new JMSTransactionDetail(xid, tx, 
entry.getValue());
-         txDetailListJson.add(detail.toJSON());
-      }
-      return txDetailListJson.toString();
+      return 
server.getActiveMQServerControl().listPreparedTransactionDetailsAsJSON((xid, 
tx, creation) -> new JMSTransactionDetail(xid, tx, creation));
    }
 
    @Override
    public String listPreparedTransactionDetailsAsHTML() throws Exception {
-      ResourceManager resourceManager = server.getResourceManager();
-      Map<Xid, Long> xids = 
resourceManager.getPreparedTransactionsWithCreationTime();
-      if (xids == null || xids.size() == 0) {
-         return "<h3>*** Prepared Transaction Details ***</h3><p>No 
entry.</p>";
-      }
-
-      ArrayList<Entry<Xid, Long>> xidsSortedByCreationTime = new 
ArrayList<>(xids.entrySet());
-      Collections.sort(xidsSortedByCreationTime, new Comparator<Entry<Xid, 
Long>>() {
-         @Override
-         public int compare(final Entry<Xid, Long> entry1, final Entry<Xid, 
Long> entry2) {
-            // sort by creation time, oldest first
-            return (int) (entry1.getValue() - entry2.getValue());
-         }
-      });
-
-      StringBuilder html = new StringBuilder();
-      html.append("<h3>*** Prepared Transaction Details ***</h3>");
-
-      for (Map.Entry<Xid, Long> entry : xidsSortedByCreationTime) {
-         Xid xid = entry.getKey();
-         Transaction tx = resourceManager.getTransaction(xid);
-         if (tx == null) {
-            continue;
-         }
-         TransactionDetail detail = new JMSTransactionDetail(xid, tx, 
entry.getValue());
-         JsonObject txJson = detail.toJSON();
-
-         html.append("<table border=\"1\">");
-         html.append("<tr><th>creation_time</th>");
-         html.append("<td>" + txJson.get(TransactionDetail.KEY_CREATION_TIME) 
+ "</td>");
-         html.append("<th>xid_as_base_64</th>");
-         html.append("<td colspan=\"3\">" + 
txJson.get(TransactionDetail.KEY_XID_AS_BASE64) + "</td></tr>");
-         html.append("<tr><th>xid_format_id</th>");
-         html.append("<td>" + txJson.get(TransactionDetail.KEY_XID_FORMAT_ID) 
+ "</td>");
-         html.append("<th>xid_global_txid</th>");
-         html.append("<td>" + 
txJson.get(TransactionDetail.KEY_XID_GLOBAL_TXID) + "</td>");
-         html.append("<th>xid_branch_qual</th>");
-         html.append("<td>" + 
txJson.get(TransactionDetail.KEY_XID_BRANCH_QUAL) + "</td></tr>");
-
-         html.append("<tr><th colspan=\"6\">Message List</th></tr>");
-         html.append("<tr><td colspan=\"6\">");
-         html.append("<table border=\"1\" cellspacing=\"0\" 
cellpadding=\"0\">");
-
-         JsonArray msgs = 
txJson.getJsonArray(TransactionDetail.KEY_TX_RELATED_MESSAGES);
-         for (int i = 0; i < msgs.size(); i++) {
-            JsonObject msgJson = msgs.getJsonObject(i);
-            JsonObject props = 
msgJson.getJsonObject(TransactionDetail.KEY_MSG_PROPERTIES);
-            StringBuilder propstr = new StringBuilder();
-
-            for (String key : props.keySet()) {
-               propstr.append(key);
-               propstr.append("=");
-               propstr.append(props.get(key));
-               propstr.append(", ");
-            }
-
-            html.append("<th>operation_type</th>");
-            html.append("<td>" + 
msgJson.get(TransactionDetail.KEY_MSG_OP_TYPE) + "</th>");
-            html.append("<th>message_type</th>");
-            html.append("<td>" + msgJson.get(TransactionDetail.KEY_MSG_TYPE) + 
"</td></tr>");
-            html.append("<tr><th>properties</th>");
-            html.append("<td colspan=\"3\">" + propstr.toString() + 
"</td></tr>");
-         }
-         html.append("</table></td></tr>");
-         html.append("</table><br/>");
-      }
-
-      return html.toString();
+      return 
server.getActiveMQServerControl().listPreparedTransactionDetailsAsHTML((xid, 
tx, creation) -> new JMSTransactionDetail(xid, tx, creation));
    }
 
    // Public --------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c26c970d/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/transaction/JMSTransactionDetail.java
----------------------------------------------------------------------
diff --git 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/transaction/JMSTransactionDetail.java
 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/transaction/JMSTransactionDetail.java
index ecb4ccb..f703522 100644
--- 
a/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/transaction/JMSTransactionDetail.java
+++ 
b/artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/transaction/JMSTransactionDetail.java
@@ -32,7 +32,7 @@ import 
org.apache.activemq.artemis.jms.client.ActiveMQTextMessage;
 
 public class JMSTransactionDetail extends TransactionDetail {
 
-   public JMSTransactionDetail(Xid xid, Transaction tx, Long creation) throws 
Exception {
+   public JMSTransactionDetail(Xid xid, Transaction tx, Long creation) {
       super(xid, tx, creation);
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c26c970d/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 41d7b30..73a731d 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
@@ -114,6 +114,7 @@ import 
org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
 import org.apache.activemq.artemis.core.transaction.ResourceManager;
 import org.apache.activemq.artemis.core.transaction.Transaction;
 import org.apache.activemq.artemis.core.transaction.TransactionDetail;
+import org.apache.activemq.artemis.core.transaction.TransactionDetailFactory;
 import org.apache.activemq.artemis.core.transaction.impl.CoreTransactionDetail;
 import org.apache.activemq.artemis.core.transaction.impl.XidImpl;
 import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
@@ -1241,6 +1242,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
    @Override
    public String listPreparedTransactionDetailsAsJSON() throws Exception {
+      return listPreparedTransactionDetailsAsJSON((xid, tx, creation) -> new 
CoreTransactionDetail(xid, tx, creation));
+   }
+
+   public String listPreparedTransactionDetailsAsJSON(TransactionDetailFactory 
factory) throws Exception {
       checkStarted();
 
       clearIO();
@@ -1269,7 +1274,7 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
                continue;
             }
 
-            TransactionDetail detail = new CoreTransactionDetail(xid, tx, 
entry.getValue());
+            TransactionDetail detail = factory.createTransactionDetail(xid, 
tx, entry.getValue());
 
             txDetailListJson.add(detail.toJSON());
          }
@@ -1281,6 +1286,10 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
 
    @Override
    public String listPreparedTransactionDetailsAsHTML() throws Exception {
+      return listPreparedTransactionDetailsAsHTML((xid, tx, creation) -> new 
CoreTransactionDetail(xid, tx, creation));
+   }
+
+   public String listPreparedTransactionDetailsAsHTML(TransactionDetailFactory 
factory) throws Exception {
       checkStarted();
 
       clearIO();
@@ -1311,7 +1320,7 @@ public class ActiveMQServerControlImpl extends 
AbstractControl implements Active
                continue;
             }
 
-            TransactionDetail detail = new CoreTransactionDetail(xid, tx, 
entry.getValue());
+            TransactionDetail detail = factory.createTransactionDetail(xid, 
tx, entry.getValue());
 
             JsonObject txJson = detail.toJSON();
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c26c970d/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetailFactory.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetailFactory.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetailFactory.java
new file mode 100644
index 0000000..7f5e852
--- /dev/null
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/TransactionDetailFactory.java
@@ -0,0 +1,24 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.activemq.artemis.core.transaction;
+
+import javax.transaction.xa.Xid;
+
+public interface TransactionDetailFactory {
+   TransactionDetail createTransactionDetail(Xid xid, Transaction tx, Long 
creation);
+}

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c26c970d/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/CoreTransactionDetail.java
----------------------------------------------------------------------
diff --git 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/CoreTransactionDetail.java
 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/CoreTransactionDetail.java
index 95036da..e0ea891 100644
--- 
a/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/CoreTransactionDetail.java
+++ 
b/artemis-server/src/main/java/org/apache/activemq/artemis/core/transaction/impl/CoreTransactionDetail.java
@@ -26,7 +26,7 @@ import 
org.apache.activemq.artemis.core.transaction.TransactionDetail;
 
 public class CoreTransactionDetail extends TransactionDetail {
 
-   public CoreTransactionDetail(Xid xid, Transaction tx, Long creation) throws 
Exception {
+   public CoreTransactionDetail(Xid xid, Transaction tx, Long creation) {
       super(xid, tx, creation);
    }
 

Reply via email to