You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2013/10/02 00:59:35 UTC
svn commit: r1528259 - in /tomee/tomee/trunk:
container/openejb-core/src/main/java/org/apache/openejb/monitoring/
container/openejb-core/src/main/java/org/apache/openejb/resource/
server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/
Author: jlmonteiro
Date: Tue Oct 1 22:59:35 2013
New Revision: 1528259
URL: http://svn.apache.org/r1528259
Log:
Adding REST resources to JMX
Modified:
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java
tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java
tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java?rev=1528259&r1=1528258&r2=1528259&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/LocalMBeanServer.java Tue Oct 1 22:59:35 2013
@@ -98,6 +98,15 @@ public class LocalMBeanServer implements
return registerSilently(new DynamicMBeanWrapper(object), name);
}
+ public static void unregisterSilently(final ObjectName name) {
+ try {
+ get().unregisterMBean(name);
+
+ } catch (Exception e) {
+ LOGGER.error("Cannot unregister MBean " + name, e);
+ }
+ }
+
public static TabularData tabularData(String typeName, String typeDescription, String[] names, Object[] values) {
if (names.length == 0) {
return null;
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java?rev=1528259&r1=1528258&r2=1528259&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/resource/GeronimoTransactionManagerFactory.java Tue Oct 1 22:59:35 2013
@@ -28,6 +28,7 @@ import org.apache.openejb.api.internal.I
import org.apache.openejb.api.jmx.Description;
import org.apache.openejb.api.jmx.MBean;
import org.apache.openejb.api.jmx.ManagedAttribute;
+import org.apache.openejb.api.jmx.ManagedOperation;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.monitoring.LocalMBeanServer;
import org.apache.openejb.monitoring.ObjectNameBuilder;
@@ -105,7 +106,9 @@ public class GeronimoTransactionManagerF
final GeronimoTransactionManager geronimoTransactionManager = new GeronimoTransactionManager(defaultTransactionTimeoutSeconds, xidFactory, txLog);
final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb.management")
.set("j2eeType", "TransactionManager");
- LocalMBeanServer.registerDynamicWrapperSilently(new TransactionManagerMBean(geronimoTransactionManager), jmxName.build());
+ LocalMBeanServer.registerDynamicWrapperSilently(
+ new TransactionManagerMBean(geronimoTransactionManager, defaultTransactionTimeout, txLog),
+ jmxName.build());
return geronimoTransactionManager;
}
@@ -122,9 +125,13 @@ public class GeronimoTransactionManagerF
public static final class TransactionManagerMBean {
private final GeronimoTransactionManager transactionManager;
+ private final Duration defaultTransactionTimeout;
+ private final TransactionLog txLog;
- public TransactionManagerMBean(final GeronimoTransactionManager transactionManager) {
+ public TransactionManagerMBean(final GeronimoTransactionManager transactionManager, final Duration defaultTransactionTimeout, final TransactionLog txLog) {
this.transactionManager = transactionManager;
+ this.defaultTransactionTimeout = defaultTransactionTimeout;
+ this.txLog = txLog;
}
@ManagedAttribute
@@ -132,18 +139,30 @@ public class GeronimoTransactionManagerF
public long getActive() {
return transactionManager.getActiveCount();
}
+
@ManagedAttribute
@Description("Number of committed transactions")
public long getCommits() {
return transactionManager.getTotalCommits();
}
+
@ManagedAttribute
@Description("Number of rolled back transactions")
public long getRollbacks() {
return transactionManager.getTotalRollbacks();
}
+ @ManagedOperation
+ @Description("Reset statistics counters")
+ public void resetStatistics() {
+ transactionManager.resetStatistics();
+ }
+ @ManagedAttribute
+ @Description("Display the default transaction timeout")
+ public String getDefaultTransactionTimeout() {
+ return defaultTransactionTimeout.toString();
+ }
}
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java?rev=1528259&r1=1528258&r2=1528259&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/CxfRsHttpListener.java Tue Oct 1 22:59:35 2013
@@ -35,10 +35,16 @@ import org.apache.cxf.transport.http.HTT
import org.apache.cxf.transport.servlet.BaseUrlHelper;
import org.apache.openejb.BeanContext;
import org.apache.openejb.Injection;
+import org.apache.openejb.api.internal.Internal;
+import org.apache.openejb.api.jmx.Description;
+import org.apache.openejb.api.jmx.MBean;
+import org.apache.openejb.api.jmx.ManagedAttribute;
import org.apache.openejb.assembler.classic.ServiceInfo;
import org.apache.openejb.assembler.classic.util.ServiceConfiguration;
import org.apache.openejb.assembler.classic.util.ServiceInfos;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.monitoring.LocalMBeanServer;
+import org.apache.openejb.monitoring.ObjectNameBuilder;
import org.apache.openejb.rest.ThreadLocalContextManager;
import org.apache.openejb.server.cxf.transport.util.CxfUtil;
import org.apache.openejb.server.httpd.HttpRequest;
@@ -51,6 +57,8 @@ import org.apache.openejb.util.Logger;
import org.apache.openejb.util.proxy.ProxyEJB;
import org.apache.webbeans.config.WebBeansContext;
+import javax.management.ObjectName;
+import javax.management.openmbean.TabularData;
import javax.naming.Context;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
@@ -94,6 +102,7 @@ public class CxfRsHttpListener implement
private Server server;
private String context = "";
private Collection<Pattern> staticResourcesList = new CopyOnWriteArrayList<Pattern>();
+ private List<ObjectName> jmxNames = new ArrayList<ObjectName>();
static {
STATIC_CONTENT_TYPES = new HashMap<String, String>();
@@ -294,6 +303,12 @@ public class CxfRsHttpListener implement
}
public void undeploy() {
+ // unregister all MBeans
+ for (final ObjectName objectName : jmxNames) {
+ LocalMBeanServer.unregisterSilently(objectName);
+ }
+
+
final ClassLoader oldLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(CxfUtil.initBusLoader());
try {
@@ -433,7 +448,23 @@ public class CxfRsHttpListener implement
LOGGER.info("REST Application: " + Logs.forceLength(prefix, addressSize, true) + " -> " + application.getClass().getName());
Collections.sort(resourcesToLog);
+
for (Logs.LogResourceEndpointInfo resource : resourcesToLog) {
+
+ // Init and register MBeans
+ final ObjectNameBuilder jmxName = new ObjectNameBuilder("openejb.management")
+ .set("J2EEServer", "openejb")
+ .set("name", resource.classname)
+ .set("j2eeType", "REST-" + resource.type);
+
+ ObjectName jmxObjectName = jmxName.build();
+ LocalMBeanServer.registerDynamicWrapperSilently(
+ new RestServiceMBean(resource),
+ jmxObjectName);
+
+ jmxNames.add(jmxObjectName);
+ //
+
LOGGER.info(" Service URI: "
+ Logs.forceLength(resource.address, addressSize, true) + " -> "
+ Logs.forceLength(resource.type, 4, false) + " "
@@ -591,4 +622,60 @@ public class CxfRsHttpListener implement
return clazz.newInstance();
}
}
+
+ @MBean
+ @Internal
+ @Description("REST service information")
+ public class RestServiceMBean {
+
+ private String type;
+ private String address;
+ private String classname;
+ private TabularData operations;
+
+ public RestServiceMBean(final Logs.LogResourceEndpointInfo jmxName) {
+ this.type = jmxName.type;
+ this.address = jmxName.address;
+ this.classname = jmxName.classname;
+
+ final String[] names = new String[operations.size()];
+ final String[] values = new String[operations.size()];
+ int idx = 0;
+ for (Logs.LogOperationEndpointInfo operation : jmxName.operations) {
+ names[idx] = Logs.forceLength(operation.http, jmxName.methodSize, false) + " "
+ + Logs.forceLength(operation.address, operation.address.length(), true);
+ values[idx] = Logs.forceLength(operation.method, jmxName.methodStrSize, true);
+ idx++;
+ }
+ LocalMBeanServer.tabularData(
+ "Operations",
+ "Operations for this endpoint",
+ names, values
+ );
+ }
+
+ @ManagedAttribute
+ @Description("The type of the REST service")
+ public String getType() {
+ return type;
+ }
+
+ @ManagedAttribute
+ @Description("The REST service address")
+ public String getAddress() {
+ return address;
+ }
+
+ @ManagedAttribute
+ @Description("The REST service class name")
+ public String getClassname() {
+ return classname;
+ }
+
+ @ManagedAttribute
+ @Description("All available methods")
+ public TabularData getOperations() {
+ return operations;
+ }
+ }
}