You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2002/11/14 15:24:06 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans MBeanUtils.java ServerLifecycleListener.java

remm        2002/11/14 06:24:06

  Modified:    catalina/src/share/org/apache/catalina/mbeans
                        MBeanUtils.java ServerLifecycleListener.java
  Log:
  - Add support for the RMI and IIOP based adaptors of MX4J.
  - The RMI based adaptor could in theory be used with MC4J (see at sf.net),
    but it fails, because:
    - MC4J only works with MX4J 1.1 (and not 1.1.1)
    - MX4J 1.1.1 changed the name of the putNamingProperty (to putJNDIProperty)
    It is likely the next release of MC4J will work out of the box (but not on my laptop,
    where it bothers my ATI display driver, and causes a BSOD).
  
  Revision  Changes    Path
  1.8       +105 -4    jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java
  
  Index: MBeanUtils.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans/MBeanUtils.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- MBeanUtils.java	8 Nov 2002 11:32:37 -0000	1.7
  +++ MBeanUtils.java	14 Nov 2002 14:24:05 -0000	1.8
  @@ -65,8 +65,11 @@
   
   
   import java.io.InputStream;
  +import java.lang.reflect.Method;
   import java.net.URL;
   import java.net.URLEncoder;
  +
  +import javax.management.Attribute;
   import javax.management.InstanceAlreadyExistsException;
   import javax.management.MalformedObjectNameException;
   import javax.management.MBeanException;
  @@ -77,6 +80,7 @@
   import javax.management.OperationsException;
   import javax.management.modelmbean.InvalidTargetObjectTypeException;
   import javax.management.modelmbean.ModelMBean;
  +
   import org.apache.catalina.Connector;
   import org.apache.catalina.Contained;
   import org.apache.catalina.Container;
  @@ -1619,6 +1623,103 @@
               }
           }
           return (mserver);
  +
  +    }
  +
  +
  +    /**
  +     * Create a RMI adapter [MX4J specific].
  +     */
  +    public static void createRMIAdaptor(String adaptorType)
  +        throws Exception {
  +
  +        String namingProviderObjectName = null;
  +        String namingProviderClassName = null;
  +        String adaptorObjectName = null;
  +        String adaptorClassName = null;
  +        String adaptorMbeanClassName = null;
  +        boolean delay = false;
  +        String jndiName = "jrmp";
  +        String contextFactory = null;
  +        String providerUrl = null;
  +
  +        if (adaptorType.equals("jrmp")) {
  +            namingProviderObjectName = "Naming:type=rmiregistry";
  +            namingProviderClassName = "mx4j.tools.naming.NamingService";
  +            adaptorObjectName = "Adaptor:protocol=JRMP";
  +            adaptorClassName = "mx4j.adaptor.rmi.jrmp.JRMPAdaptor";
  +            adaptorMbeanClassName = "mx4j.adaptor.rmi.jrmp.JRMPAdaptorMBean";
  +            contextFactory = 
  +                "com.sun.jndi.rmi.registry.RegistryContextFactory";
  +            providerUrl = "rmi://localhost:1099";
  +        } else if (adaptorType.equals("iiop")) {
  +            namingProviderObjectName = "Naming:type=tnameserv";
  +            namingProviderClassName = "mx4j.tools.naming.CosNamingService";
  +            delay = true;
  +            adaptorObjectName = "Adaptor:protocol=IIOP";
  +            adaptorClassName = "mx4j.adaptor.rmi.iiop.IIOPAdaptor";
  +            adaptorMbeanClassName = "mx4j.adaptor.rmi.iiop.IIOPAdaptorMBean";
  +            contextFactory = "com.sun.jndi.cosnaming.CNCtxFactory";
  +            providerUrl = "iiop://localhost:900";
  +        } else {
  +            throw new IllegalArgumentException("Unknown adaptor type");
  +        }
  +
  +        // Create and start the naming service
  +        ObjectName naming = new ObjectName(namingProviderObjectName);
  +        mserver.createMBean(namingProviderClassName, naming, null);
  +        if (delay) {
  +            mserver.setAttribute(naming, new Attribute
  +                                 ("Delay", new Integer(5000)));
  +        }
  +        mserver.invoke(naming, "start", null, null);
  +
  +        // Create the JRMP adaptor
  +        ObjectName adaptor = new ObjectName(adaptorObjectName);
  +        mserver.createMBean(adaptorClassName, adaptor, null);
  +
  +        Class proxyClass = Class.forName("mx4j.util.StandardMBeanProxy");
  +
  +        Object args[] = null;
  +        Class types[] = null;
  +        Method method = null;
  +
  +        types = new Class[3];
  +        types[0] = Class.class;
  +        types[1] = MBeanServer.class;
  +        types[2] = ObjectName.class;
  +        args = new Object[3];
  +        args[0] = Class.forName(adaptorMbeanClassName);
  +        args[1] = mserver;
  +        args[2] = adaptor;
  +        method = proxyClass.getMethod("create", types);
  +        Object bean = method.invoke(null, args);
  +
  +        Class beanClass = bean.getClass();
  +
  +        args = new Object[1];
  +        args[0] = jndiName;
  +        types = new Class[1];
  +        types[0] = String.class;
  +        method = beanClass.getMethod("setJNDIName", types);
  +        method.invoke(bean, args);
  +
  +        args = new Object[2];
  +        types = new Class[2];
  +        types[0] = Object.class;
  +        types[1] = Object.class;
  +        method = beanClass.getMethod("putJNDIProperty", types);
  +
  +        args[0] = javax.naming.Context.INITIAL_CONTEXT_FACTORY;
  +        args[1] = contextFactory;
  +        method.invoke(bean, args);
  +
  +        args[0] = javax.naming.Context.PROVIDER_URL;
  +        args[1] = providerUrl;
  +        method.invoke(bean, args);
  +
  +        method = beanClass.getMethod("start", null);
  +        method.invoke(bean, null);
   
       }
   
  
  
  
  1.4       +30 -4     jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans/ServerLifecycleListener.java
  
  Index: ServerLifecycleListener.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/mbeans/ServerLifecycleListener.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ServerLifecycleListener.java	20 Sep 2002 21:22:31 -0000	1.3
  +++ ServerLifecycleListener.java	14 Nov 2002 14:24:06 -0000	1.4
  @@ -152,6 +152,20 @@
       }
   
   
  +    /**
  +     * MX4J adaptor name.
  +     */
  +    protected String adaptor = null;
  +
  +    public String getAdaptor() {
  +        return (this.adaptor);
  +    }
  +
  +    public void setAdaptor(String adaptor) {
  +        this.adaptor = adaptor;
  +    }
  +
  +
       // ---------------------------------------------- ContainerListener Methods
   
   
  @@ -205,6 +219,14 @@
   
                   createMBeans();
   
  +                if (adaptor != null) {
  +                    try {
  +                        MBeanUtils.createRMIAdaptor(adaptor);
  +                    } catch (Exception e) {
  +                        log("createAdaptor: Exception", e);
  +                    }
  +                }
  +
               }
   
               /*
  @@ -220,6 +242,10 @@
               if (lifecycle instanceof Server) {
                   destroyMBeans();
               }
  +
  +            // FIXME: RMI adaptor should be stopped; however, this is 
  +            // undocumented in MX4J, and reports exist in the MX4J bug DB that
  +            // this doesn't work
   
           } else if (Context.RELOAD_EVENT.equals(event.getType())) {
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>