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();