[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