hgomez 2003/09/29 00:38:10 Modified: proposals/JmxSupport/WEB-INF/classes/org/apache/tomcat/modules/config MxInterceptor.java DynamicMBeanProxy.java Log: Add JRMP support if we ever use this Interceptor Revision Changes Path 1.2 +127 -53 jakarta-tomcat/proposals/JmxSupport/WEB-INF/classes/org/apache/tomcat/modules/config/MxInterceptor.java Index: MxInterceptor.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/proposals/JmxSupport/WEB-INF/classes/org/apache/tomcat/modules/config/MxInterceptor.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- MxInterceptor.java 30 Sep 2002 02:17:43 -0000 1.1 +++ MxInterceptor.java 29 Sep 2003 07:38:10 -0000 1.2 @@ -58,12 +58,24 @@ */ package org.apache.tomcat.modules.config; -import org.apache.tomcat.core.*; -import org.apache.tomcat.util.io.FileUtil; -import java.io.*; -import java.util.*; +import java.io.IOException; +import java.net.InetAddress; -import javax.management.*; +import javax.management.Attribute; +import javax.management.MBeanServer; +import javax.management.ObjectName; + +import mx4j.adaptor.rmi.jrmp.JRMPAdaptorMBean; +import mx4j.tools.naming.NamingServiceMBean; +import mx4j.util.StandardMBeanProxy; + +import org.apache.tomcat.core.BaseInterceptor; +import org.apache.tomcat.core.Context; +import org.apache.tomcat.core.ContextManager; +import org.apache.tomcat.core.Request; +import org.apache.tomcat.core.Response; +import org.apache.tomcat.core.TomcatException; +import org.apache.tomcat.modules.config.DynamicMBeanProxy; /** * @@ -72,11 +84,12 @@ public class MxInterceptor extends BaseInterceptor { MBeanServer mserver; - private int port=-1; + private int port=-1; private String host; - private String auth; + private String auth; private String user; private String password; + private String type = "http"; // -------------------- Tomcat callbacks -------------------- @@ -101,7 +114,7 @@ /* -------------------- Public methods -------------------- */ - /** Enable the MX4J internal adapter + /** Enable the MX4J internal adaptor */ public void setPort( int i ) { port=i; @@ -140,58 +153,119 @@ return password != null && password.length() > 0; } + public void setType(String type) { + this.type = type; + } + + public String getType() { + return type; + } + /* ==================== Start/stop ==================== */ ObjectName serverName=null; - /** Initialize the worker. After this call the worker will be - * ready to accept new requests. - */ - public void loadAdapter() throws IOException { - try { - serverName = new ObjectName("Http:name=HttpAdaptor"); - mserver.createMBean("mx4j.adaptor.http.HttpAdaptor", serverName, null); + /** Initialize the JRMP Adaptor for JMX. + */ + private void loadJRMPAdaptor() + { + try + { + // Create the RMI Naming registry + ObjectName naming = new ObjectName("Naming:type=registry"); + mserver.createMBean("mx4j.tools.naming.NamingService", naming, null, new Object[] {new Integer(port)}, new String[] {"int"}); + NamingServiceMBean nsmbean = (NamingServiceMBean)StandardMBeanProxy.create(NamingServiceMBean.class, mserver, naming); + nsmbean.start(); + + // Create the JRMP adaptor + ObjectName adaptor = new ObjectName("Adaptor:protocol=JRMP"); + mserver.createMBean("mx4j.adaptor.rmi.jrmp.JRMPAdaptor", adaptor, null); + JRMPAdaptorMBean jrmpmbean = (JRMPAdaptorMBean)StandardMBeanProxy.create(JRMPAdaptorMBean.class, mserver, adaptor); + + // Set the JNDI name with which will be registered + String jndiName = "jrmp"; + jrmpmbean.setJNDIName(jndiName); + + String lHost = host; + + if (lHost == null) + lHost = "localhost"; + else if (lHost.length() == 0) + lHost = InetAddress.getLocalHost().getHostName(); + + log( "Started mx4j jrmp adaptor" + ((host != null) ? " for host " + host : "") + " at port " + port); + + jrmpmbean.putJNDIProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory"); + jrmpmbean.putJNDIProperty(javax.naming.Context.PROVIDER_URL, "rmi://" + lHost + ":" + port); + + jrmpmbean.start(); + + } + catch( Throwable t ) + { + log("Can't load MX4J JRMP adaptor" + t.toString() ); + } + } + + /** Initialize the HTTP Adaptor for JMX. + */ + private void loadHTTPAdaptor() { + try { + serverName = new ObjectName("Http:name=HttpAdaptor"); + mserver.createMBean("mx4j.adaptor.http.HttpAdaptor", serverName, null); - if( host!=null ) - mserver.setAttribute(serverName, new Attribute("Host", host)); + if( host!=null ) + mserver.setAttribute(serverName, new Attribute("Host", host)); - mserver.setAttribute(serverName, new Attribute("Port", new Integer(port))); + mserver.setAttribute(serverName, new Attribute("Port", new Integer(port))); - // use authentication if user/password set - if( auth!=null && user!=null && password!=null) - mserver.setAttribute(serverName, new Attribute("AuthenticationMethod", auth)); - - // add user names - mserver.invoke(serverName, "addAuthorization", new Object[] {user, password}, - new String[] {"java.lang.String", "java.lang.String"}); - - ObjectName processorName = new ObjectName("Http:name=XSLTProcessor"); - mserver.createMBean("mx4j.adaptor.http.XSLTProcessor", processorName, null); - mserver.setAttribute(serverName, new Attribute("ProcessorName", processorName)); + // use authentication if user/password set + if( auth!=null && user!=null && password!=null) + mserver.setAttribute(serverName, new Attribute("AuthenticationMethod", auth)); + + // add user names + mserver.invoke(serverName, "addAuthorization", new Object[] {user, password}, + new String[] {"java.lang.String", "java.lang.String"}); + + ObjectName processorName = new ObjectName("Http:name=XSLTProcessor"); + mserver.createMBean("mx4j.adaptor.http.XSLTProcessor", processorName, null); + mserver.setAttribute(serverName, new Attribute("ProcessorName", processorName)); - mserver.invoke(serverName, "start", null, null); - log( "Started mx4j http adaptor" + ((host != null) ? " for host " + host : "") + " at port " + port); - return; - } catch( Throwable t ) { - log( "Can't load the MX4J http adapter " + t.toString() ); - } - - try { - Class c=Class.forName( "com.sun.jdmk.comm.HtmlAdaptorServer" ); - Object o=c.newInstance(); - serverName=new ObjectName("Adaptor:name=html,port=" + port); - log("Registering the JMX_RI html adapter " + serverName); - mserver.registerMBean(o, serverName); - - mserver.setAttribute(serverName, - new Attribute("Port", new Integer(port))); + mserver.invoke(serverName, "start", null, null); + log( "Started mx4j http adaptor" + ((host != null) ? " for host " + host : "") + " at port " + port); + return; + } catch( Throwable t ) { + log( "Can't load the MX4J http adaptor " + t.toString() ); + } + + try { + Class c=Class.forName( "com.sun.jdmk.comm.HtmlAdaptorServer" ); + Object o=c.newInstance(); + serverName=new ObjectName("Adaptor:name=html,port=" + port); + log("Registering the JMX_RI html adaptor " + serverName); + mserver.registerMBean(o, serverName); + + mserver.setAttribute(serverName, + new Attribute("Port", new Integer(port))); + + mserver.invoke(serverName, "start", null, null); + log( "Start JMX_RI http adaptor at port " + port); + + } catch( Throwable t ) { + log( "Can't load the JMX_RI http adaptor " + t.toString() ); + } + } - mserver.invoke(serverName, "start", null, null); - log( "Start JMX_RI http adaptor at port " + port); - - } catch( Throwable t ) { - log( "Can't load the JMX_RI http adapter " + t.toString() ); - } + /** Initialize the worker. After this call the worker will be + * ready to accept new requests. + */ + public void loadAdaptor() throws IOException { + + if (type.equalsIgnoreCase("jrmp")) + loadJRMPAdaptor(); + else + loadHTTPAdaptor(); } + public void destroy() { try { @@ -233,7 +307,7 @@ if( port > 0 ) { try { - loadAdapter(); + loadAdaptor(); } catch (IOException ioe) { 1.2 +22 -5 jakarta-tomcat/proposals/JmxSupport/WEB-INF/classes/org/apache/tomcat/modules/config/DynamicMBeanProxy.java Index: DynamicMBeanProxy.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/proposals/JmxSupport/WEB-INF/classes/org/apache/tomcat/modules/config/DynamicMBeanProxy.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DynamicMBeanProxy.java 30 Sep 2002 02:17:43 -0000 1.1 +++ DynamicMBeanProxy.java 29 Sep 2003 07:38:10 -0000 1.2 @@ -59,11 +59,28 @@ package org.apache.tomcat.modules.config; -import java.io.*; -import java.net.*; -import java.lang.reflect.*; -import java.util.*; -import javax.management.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.Iterator; + +import javax.management.Attribute; +import javax.management.AttributeList; +import javax.management.AttributeNotFoundException; +import javax.management.DynamicMBean; +import javax.management.InvalidAttributeValueException; +import javax.management.MBeanAttributeInfo; +import javax.management.MBeanConstructorInfo; +import javax.management.MBeanException; +import javax.management.MBeanInfo; +import javax.management.MBeanNotificationInfo; +import javax.management.MBeanOperationInfo; +import javax.management.MBeanServer; +import javax.management.MBeanServerFactory; +import javax.management.ObjectName; +import javax.management.ReflectionException; /** * DynamicMBean implementation using introspection to manage any
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]