[jboss-cvs] JBossAS SVN: r70844 - trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Mar 13 17:05:21 EDT 2008
Author: adrian at jboss.org
Date: 2008-03-13 17:05:21 -0400 (Thu, 13 Mar 2008)
New Revision: 70844
Modified:
trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/ServiceControllerLifecycleCallback.java
Log:
[JBAS-5313] - Register @JMX MBeans with the pojo's classloader's object name as classloader
Modified: trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/ServiceControllerLifecycleCallback.java
===================================================================
--- trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/ServiceControllerLifecycleCallback.java 2008-03-13 20:34:45 UTC (rev 70843)
+++ trunk/system-jmx/src/main/org/jboss/system/microcontainer/jmx/ServiceControllerLifecycleCallback.java 2008-03-13 21:05:21 UTC (rev 70844)
@@ -21,14 +21,21 @@
*/
package org.jboss.system.microcontainer.jmx;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.management.MBeanServer;
import javax.management.ObjectName;
import javax.management.StandardMBean;
import org.jboss.aop.microcontainer.aspects.jmx.JMX;
+import org.jboss.classloading.spi.RealClassLoader;
import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
import org.jboss.logging.Logger;
import org.jboss.metadata.spi.MetaData;
+import org.jboss.mx.server.ServerConstants;
+import org.jboss.mx.util.ObjectNameFactory;
import org.jboss.system.ServiceController;
/**
@@ -45,7 +52,10 @@
/** The service controller */
private ServiceController serviceController;
-
+
+ /** The MBean Registry Object Name */
+ private static ObjectName MBEAN_REGISTRY = ObjectNameFactory.create(ServerConstants.MBEAN_REGISTRY);
+
/**
* Get the serviceController.
*
@@ -87,7 +97,43 @@
Object mbean = (registerDirectly ? context.getTarget()
: new StandardMBean(context.getTarget(), (Class) intfClass));
MBeanServer server = serviceController.getMBeanServer();
- server.registerMBean(mbean, objectName);
+ ClassLoader cl = null;
+ if (context instanceof InvokeDispatchContext)
+ {
+ try
+ {
+ cl = ((InvokeDispatchContext) context).getClassLoader();
+ }
+ catch (Throwable t)
+ {
+ log.debug("Unable to get classloader from " + context + " " + t);
+ }
+ if (cl == null)
+ cl = Thread.currentThread().getContextClassLoader();
+ }
+
+ ObjectName classLoaderName = null;
+ while (cl != null)
+ {
+ if (cl instanceof RealClassLoader)
+ {
+ classLoaderName = ((RealClassLoader) cl).getObjectName();
+ break;
+ }
+ cl = cl.getParent();
+ }
+
+ if (classLoaderName != null)
+ {
+ HashMap valueMap = new HashMap();
+ valueMap.put(ServerConstants.CLASSLOADER, cl);
+ final Object[] args = {mbean, objectName, valueMap};
+ final String[] sig = {Object.class.getName(),
+ ObjectName.class.getName(), Map.class.getName()};
+ server.invoke(MBEAN_REGISTRY, "registerMBean", args, sig);
+ }
+ else
+ server.registerMBean(mbean, objectName);
try
{
serviceController.start(objectName);
More information about the jboss-cvs-commits
mailing list