You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by hi...@apache.org on 2011/04/28 07:51:12 UTC

svn commit: r1097326 - in /synapse/trunk/java/modules: commons/src/main/java/org/apache/synapse/commons/jmx/ transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/

Author: hiranya
Date: Thu Apr 28 05:51:12 2011
New Revision: 1097326

URL: http://svn.apache.org/viewvc?rev=1097326&view=rev
Log:
Naming the threads used by the NHTTP MBeans and minor refactorings

Modified:
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/MBeanRegistrar.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingView.java
    synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingViewMBean.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsView.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsViewMBean.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
    synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyViewMBean.java

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/MBeanRegistrar.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/MBeanRegistrar.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/MBeanRegistrar.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/MBeanRegistrar.java Thu Apr 28 05:51:12 2011
@@ -40,7 +40,7 @@ public class MBeanRegistrar {
     private MBeanRegistrar() {
     }
 
-    public void registerMBean(Object mBeanInstance, String category, String id) {
+    public boolean registerMBean(Object mBeanInstance, String category, String id) {
         assertNull(mBeanInstance, "MBean instance is null");
         assertNull(category, "MBean instance category is null");
         assertNull(id, "MBean instance name is null");
@@ -54,23 +54,27 @@ public class MBeanRegistrar {
                 mbs.unregisterMBean(name);
                 mbs.registerMBean(mBeanInstance, name);
             }
+            return true;
         } catch (Exception e) {
             log.warn("Error registering a MBean with name ' " + id +
                     " ' and category name ' " + category + "' for JMX management", e);
+            return false;
         }
     }
 
-    public void unRegisterMBean(String category, String id) {
+    public boolean unRegisterMBean(String category, String id) {
         try {
             MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
             ObjectName objName = new ObjectName(getObjectName(category, id));
             if (mbs.isRegistered(objName)) {
                 mbs.unregisterMBean(objName);
+                return true;
             }
         } catch (Exception e) {
             log.warn("Error un-registering a  MBean with name ' " + id +
                     " ' and category name ' " + category + "' for JMX management", e);
         }
+        return false;
     }
 
     private String getObjectName(String category, String id) {

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingView.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingView.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingView.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingView.java Thu Apr 28 05:51:12 2011
@@ -25,6 +25,7 @@ import org.apache.commons.logging.LogFac
 import java.util.*;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.TimeUnit;
 import java.lang.management.ThreadMXBean;
 import java.lang.management.ManagementFactory;
@@ -78,10 +79,17 @@ public class ThreadingView implements Th
 
     private static final ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
 
-    private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
+    private ScheduledExecutorService scheduler;
 
-    public ThreadingView(String threadNamePrefix) {
+    public ThreadingView(final String threadNamePrefix) {
         this.threadNamePrefix = threadNamePrefix;
+        this.scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
+            int counter = 0;
+
+            public Thread newThread(Runnable r) {
+                return new Thread(r, threadNamePrefix + "-thread-view-" + counter++);
+            }
+        });
         initMBean();
     }
 
@@ -103,7 +111,9 @@ public class ThreadingView implements Th
                     threadNamePrefix);
         }
         MBeanRegistrar.getInstance().unRegisterMBean(SYNAPSE_THREADING_VIEW, threadNamePrefix);
-        scheduler.shutdownNow();
+        if (!scheduler.isShutdown()) {
+            scheduler.shutdownNow();
+        }
     }
 
     private void initMBean() {
@@ -115,8 +125,15 @@ public class ThreadingView implements Th
                 SHORT_SAMPLING_PERIOD, TimeUnit.SECONDS);
         scheduler.scheduleAtFixedRate(new LongTermDataCollectorTask(), LONG_SAMPLING_PERIOD,
                 LONG_SAMPLING_PERIOD, TimeUnit.SECONDS);
-        MBeanRegistrar.getInstance().registerMBean(this, SYNAPSE_THREADING_VIEW,
-                    threadNamePrefix);
+        boolean registered = false;
+        try {
+            registered = MBeanRegistrar.getInstance().registerMBean(this, SYNAPSE_THREADING_VIEW,
+                        threadNamePrefix);
+        } finally {
+            if (!registered) {
+                scheduler.shutdownNow();
+            }
+        }
     }
 
     public int getTotalWorkerCount() {

Modified: synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingViewMBean.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingViewMBean.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingViewMBean.java (original)
+++ synapse/trunk/java/modules/commons/src/main/java/org/apache/synapse/commons/jmx/ThreadingViewMBean.java Thu Apr 28 05:51:12 2011
@@ -21,7 +21,9 @@ package org.apache.synapse.commons.jmx;
 
 import java.util.Date;
 
-@SuppressWarnings({"UnusedDeclaration"})
+/**
+ * Provides metrics related to a given thread pool or group.
+ */
 public interface ThreadingViewMBean {
 
     public int getTotalWorkerCount();

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsView.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsView.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsView.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsView.java Thu Apr 28 05:51:12 2011
@@ -22,6 +22,7 @@ package org.apache.synapse.transport.nht
 import org.apache.synapse.commons.jmx.MBeanRegistrar;
 
 import java.util.*;
+import java.util.concurrent.ThreadFactory;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.Executors;
@@ -60,7 +61,8 @@ public class ConnectionsView implements 
     private AtomicInteger activeConnections = new AtomicInteger(0);
     private AtomicInteger shortTermOpenedConnections = new AtomicInteger(0);
     private AtomicInteger longTermOpenedConnections = new AtomicInteger(0);
-    // The map keeps the key as connectionhost:port and value as the number of connections for that host
+    // The map keeps the key as connection host:port and value as the number of connections for
+    // that host
     private Map<String,AtomicInteger> activeConnectionsPerHost = new HashMap<String,AtomicInteger>();
     // The array length must be equal to the number of buckets
     private AtomicInteger[] requestSizeCounters = new AtomicInteger[6];
@@ -68,13 +70,21 @@ public class ConnectionsView implements 
 
     private Date resetTime = Calendar.getInstance().getTime();
 
-    private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
+    private ScheduledExecutorService scheduler;
 
     private String name;
 
-    public ConnectionsView(String name) {
+    public ConnectionsView(final String name) {
         this.name = name;
 
+        this.scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
+            int counter = 0;
+
+            public Thread newThread(Runnable r) {
+                return new Thread(r, name + "-connections-view-" + counter++);
+            }
+        });
+
         initCounters(requestSizeCounters);
         initCounters(responseSizeCounters);
 
@@ -104,12 +114,21 @@ public class ConnectionsView implements 
         };
         scheduler.scheduleAtFixedRate(longTermCollector, LONG_DATA_COLLECTION_PERIOD,
                 LONG_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
-        MBeanRegistrar.getInstance().registerMBean(this, NHTTP_CONNECTIONS, name);
+        boolean registered = false;
+        try {
+            registered = MBeanRegistrar.getInstance().registerMBean(this, NHTTP_CONNECTIONS, name);
+        } finally {
+            if (!registered) {
+                scheduler.shutdownNow();
+            }
+        }
     }
 
     public void destroy() {
         MBeanRegistrar.getInstance().unRegisterMBean(NHTTP_CONNECTIONS, name);
-        scheduler.shutdownNow();
+        if (!scheduler.isShutdown()) {
+            scheduler.shutdownNow();
+        }
     }
 
     private void initCounters(AtomicInteger[] counters) {
@@ -267,6 +286,7 @@ public class ConnectionsView implements 
     /**
      * Setter method for activeConnectionsPerHost, this will get called during connection creation
      * and Connection shutdown operations
+     *
      * @param activeConnectionsPerHost
      */
     public void setActiveConnectionPerHostEntry(Map<String,AtomicInteger> activeConnectionsPerHost){

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsViewMBean.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsViewMBean.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsViewMBean.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/ConnectionsViewMBean.java Thu Apr 28 05:51:12 2011
@@ -22,6 +22,10 @@ package org.apache.synapse.transport.nht
 import java.util.Map;
 import java.util.Date;
 
+/**
+ * Provides metrics related to the number of connections created and maintained by
+ * the NHTTP transport.
+ */
 public interface ConnectionsViewMBean {
 
     public int getActiveConnections();

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyView.java Thu Apr 28 05:51:12 2011
@@ -83,7 +83,7 @@ public class LatencyView implements Late
     private Queue<Long> longTermLatencyDataQueue = new LinkedList<Long>();
 
     /** Scheduled executor on which data collectors are executed */
-    private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
+    private ScheduledExecutorService scheduler;
 
     private double allTimeAvgLatency = 0.0;
     private int count = 0;
@@ -93,16 +93,34 @@ public class LatencyView implements Late
 
     public LatencyView(boolean isHttps) {
         name = "nio-http" + (isHttps ? "s" : "");
+
+        scheduler =  Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
+            int counter = 0;
+
+            public Thread newThread(Runnable r) {
+                return new Thread(r, name + "-latency-view-" + counter++);
+            }
+        });
+
         scheduler.scheduleAtFixedRate(new ShortTermDataCollector(), SMALL_DATA_COLLECTION_PERIOD,
                 SMALL_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
         scheduler.scheduleAtFixedRate(new LongTermDataCollector(), LARGE_DATA_COLLECTION_PERIOD,
                 LARGE_DATA_COLLECTION_PERIOD, TimeUnit.SECONDS);
-        MBeanRegistrar.getInstance().registerMBean(this, NHTTP_LATENCY_VIEW, name);
+        boolean registered = false;
+        try {
+            registered = MBeanRegistrar.getInstance().registerMBean(this, NHTTP_LATENCY_VIEW, name);
+        } finally {
+            if (!registered) {
+                scheduler.shutdownNow();
+            }
+        }
     }
 
     public void destroy() {
         MBeanRegistrar.getInstance().unRegisterMBean(NHTTP_LATENCY_VIEW, name);
-        scheduler.shutdownNow();
+        if (!scheduler.isShutdown()) {
+            scheduler.shutdownNow();
+        }
     }
 
     /**

Modified: synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyViewMBean.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyViewMBean.java?rev=1097326&r1=1097325&r2=1097326&view=diff
==============================================================================
--- synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyViewMBean.java (original)
+++ synapse/trunk/java/modules/transports/core/nhttp/src/main/java/org/apache/synapse/transport/nhttp/util/LatencyViewMBean.java Thu Apr 28 05:51:12 2011
@@ -21,6 +21,10 @@ package org.apache.synapse.transport.nht
 
 import java.util.Date;
 
+/**
+ * Provides metrics related to the latency added by the NHTTP transport while mediating
+ * messages through.
+ */
 public interface LatencyViewMBean {
 
     public double getAllTimeAvgLatency();