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>