User: juhalindfors
  Date: 01/12/08 16:23:01

  Modified:    src/main/javax/management MBeanServerFactory.java
  Log:
  different servers for different people..
  
  use -Djbossmx.mbean.server.class=yourClass to override the default
  mbean server implementation
  
  Revision  Changes    Path
  1.2       +114 -21   jmx/src/main/javax/management/MBeanServerFactory.java
  
  Index: MBeanServerFactory.java
  ===================================================================
  RCS file: /cvsroot/jboss/jmx/src/main/javax/management/MBeanServerFactory.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- MBeanServerFactory.java   2001/12/03 02:08:47     1.1
  +++ MBeanServerFactory.java   2001/12/09 00:23:00     1.2
  @@ -1,5 +1,8 @@
   /*
  - * LGPL
  + * JBoss, the OpenSource J2EE webOS
  + *
  + * Distributable under LGPL license.
  + * See terms of license at gnu.org.
    */
   package javax.management;
   
  @@ -8,45 +11,135 @@
   import java.util.HashMap;
   import java.util.ArrayList;
   
  -public class MBeanServerFactory extends java.lang.Object {
  +import java.lang.reflect.Constructor;
  +import java.lang.reflect.InvocationTargetException;
   
  +/**
  + * MBeanServerFactory is used to create instances of MBean servers.
  + *
  + * @see javax.management.MBeanServer
  + *
  + * @author  <a href="mailto:[EMAIL PROTECTED]";>Juha Lindfors</a>.
  + * @version $Revision: 1.2 $
  + *   
  + */
  +public class MBeanServerFactory
  +{
  +
  +   // Constants -----------------------------------------------------
  +   private final static String DEFAULT_DOMAIN = "DefaultDomain";
  +
  +   // Attributes ----------------------------------------------------
      private static Map serverMap = new HashMap();
  -   
  -   public static void releaseMBeanServer(MBeanServer mbeanServer) {
  -      throw new Error("NYI");
  +
  +   // Public --------------------------------------------------------
  +   public static void releaseMBeanServer(MBeanServer mbeanServer)
  +   {
  +      try
  +      {
  +         String agentID = (String)mbeanServer.getAttribute(
  +                             new 
ObjectName("JMImplementation:type=MBeanServerDelegate"),
  +                             "MBeanServerId");
  +
  +         Object server = serverMap.remove(agentID);
  +
  +         if (server == null)
  +            throw new IllegalArgumentException("MBean server reference not found.");
  +      }
  +      catch (MalformedObjectNameException e)
  +      {
  +         throw new Error(e.toString());
  +      }
  +      catch (JMException e)
  +      {
  +         throw new Error("Cannot retrieve AgentID: " + e.toString());
  +      }
      }
   
  -   public static MBeanServer createMBeanServer() {
  -      return createMBeanServer("DefaultDomain");
  +   public static MBeanServer createMBeanServer()
  +   {
  +      return createMBeanServer(DEFAULT_DOMAIN);
      }
   
  -   public static MBeanServer createMBeanServer(String domain) {
  -      MBeanServer server = new org.jboss.mx.server.MBeanServerImpl(domain);
  -      serverMap.put(createAgentID(), server);
  -      return server;         
  +   public static MBeanServer createMBeanServer(String domain)
  +   {
  +      return createMBeanServer(domain, true);
      }
   
  -   public static MBeanServer newMBeanServer() {
  -      return new org.jboss.mx.server.MBeanServerImpl("DefaultDomain");
  +   public static MBeanServer newMBeanServer()
  +   {
  +      return newMBeanServer(DEFAULT_DOMAIN);
      }
  -   
  -   public static MBeanServer newMBeanServer(String domain) {
  -      return new org.jboss.mx.server.MBeanServerImpl(domain);
  +
  +   public static MBeanServer newMBeanServer(String domain)
  +   {
  +      return createMBeanServer(domain, false);
      }
   
  -   public static java.util.ArrayList findMBeanServer(String AgentId) {
  -      if (AgentId != null) {
  +   public static ArrayList findMBeanServer(String agentId)
  +   {
  +      if (agentId != null)
  +      {
            ArrayList list = new ArrayList(1);
  -         list.add(serverMap.get(AgentId));
  +         list.add(serverMap.get(agentId));
            return list;
         }
  -      
  +
         return new ArrayList(serverMap.values());
      }
   
  +   // Private -------------------------------------------------------
  +   private static MBeanServer createMBeanServer(String defaultDomain, boolean 
registerServer)
  +   {
  +      String serverClass = System.getProperty("jbossmx.mbean.server.class", 
"org.jboss.mx.server.MBeanServerImpl");
  +
  +      try
  +      {
  +         ClassLoader cl = Thread.currentThread().getContextClassLoader();
  +         Class clazz = cl.loadClass(serverClass);
  +         Constructor constructor = clazz.getConstructor(new Class[] { String.class 
});
  +         MBeanServer server = (MBeanServer)constructor.newInstance(new Object[] 
{defaultDomain});
  +
  +         if (registerServer)
  +         {
  +            String agentID = (String)server.getAttribute(
  +                                new 
ObjectName("JMImplementation:type=MBeanServerDelegate"),
  +                                "MBeanServerId");
   
  -   private static String createAgentID() { return "BOOM!"; }
  +            serverMap.put(agentID, server);
  +         }
   
  +         return server;
  +      }
  +      catch (MalformedObjectNameException e)
  +      {
  +         throw new Error(e.toString());
  +      }
  +      catch (JMException e)
  +      {
  +         throw new Error("Cannot retrieve AgentID: " + e.toString());
  +      }
  +      catch (ClassNotFoundException e)
  +      {
  +         throw new IllegalArgumentException("The MBean server implementation class 
" + serverClass + " was not found: " + e.toString());
  +      }
  +      catch (NoSuchMethodException e) 
  +      {
  +         throw new IllegalArgumentException("The MBean server implementation class 
" + serverClass + " must contain a default domain string constructor: " + serverClass 
+ "(java.langString defaultDomain)");
  +      }
  +      catch (InstantiationException e) 
  +      {
  +         throw new IllegalArgumentException("Cannot instantiate class " + 
serverClass + ": " + e.toString());
  +      }
  +      catch (IllegalAccessException e)
  +      {
  +         throw new IllegalArgumentException("Unable to create the MBean server 
instance. Illegal access to class " + serverClass + " constructor: " + e.toString());
  +      }
  +      catch (InvocationTargetException e)
  +      {
  +         throw new RuntimeException("Unable to create the MBean server instance. 
Class " + serverClass + " has raised an exception in constructor: " + 
e.getTargetException().toString());
  +      }
  +   }
   
   }
   
  
  
  

_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to