costin 2003/03/17 11:22:07 Modified: catalina/src/share/org/apache/catalina/core StandardServer.java StandardService.java mbeans-descriptors.xml Log: Get the server, service self-register. Add "serviceNames" attribute in server - this should be used instead of casting and calling the methods directly. In order for /admin to be used for clusters it is essential to _stop_ using any internal tomcat class in the admin. Just do a grep o.a.catalina in admin - it shouldn't find any import. Only JMX should be used ! The names should be stable. Revision Changes Path 1.13 +78 -10 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java Index: StandardServer.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardServer.java,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- StandardServer.java 3 Feb 2003 23:05:48 -0000 1.12 +++ StandardServer.java 17 Mar 2003 19:22:07 -0000 1.13 @@ -87,8 +87,18 @@ import java.util.Random; import javax.naming.directory.DirContext; +import javax.management.InstanceNotFoundException; +import javax.management.MBeanException; +import javax.management.RuntimeOperationsException; +import javax.management.ObjectName; +import javax.management.MBeanServer; +import javax.management.MalformedObjectNameException; +import javax.management.MBeanRegistration; import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.modeler.Registry; import org.apache.catalina.Connector; import org.apache.catalina.Container; @@ -137,8 +147,10 @@ */ public final class StandardServer - implements Lifecycle, Server { - + implements Lifecycle, Server, MBeanRegistration + { + private static Log log = LogFactory.getLog(StandardServer.class); + // -------------------------------------------------------------- Constants @@ -619,6 +631,16 @@ return (services); } + + /** @jmx:attribute List services + */ + public ObjectName[] getServiceNames() { + ObjectName onames[]=new ObjectName[ services.length ]; + for( int i=0; i<services.length; i++ ) { + onames[i]=((StandardService)services[i]).getObjectName(); + } + return onames; + } /** @@ -2331,21 +2353,67 @@ } + public void init() throws Exception { + initialize(); + } + /** * Invoke a pre-startup initialization. This is used to allow connectors * to bind to restricted ports under Unix operating environments. */ public void initialize() - throws LifecycleException { - if (initialized) - throw new LifecycleException ( - sm.getString("standardServer.initialize.initialized")); + throws LifecycleException + { + if (initialized) { + log.info(sm.getString("standardServer.initialize.initialized")); + return; + } initialized = true; + if( oname==null ) { + try { + oname=new ObjectName( "Catalina:type=Server"); + Registry.getRegistry().registerComponent(this, oname, null ); + } catch (Exception e) { + log.error("Error registering ",e); + } + } + // Initialize our defined Services for (int i = 0; i < services.length; i++) { services[i].initialize(); } } + + protected String type; + protected String domain; + protected String suffix; + protected ObjectName oname; + protected MBeanServer mserver; + public ObjectName getObjectName() { + return oname; + } + + public String getDomain() { + return domain; + } + + public ObjectName preRegister(MBeanServer server, + ObjectName name) throws Exception { + oname=name; + mserver=server; + domain=name.getDomain(); + return name; + } + + public void postRegister(Boolean registrationDone) { + } + + public void preDeregister() throws Exception { + } + + public void postDeregister() { + } + } 1.3 +87 -16 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardService.java Index: StandardService.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardService.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- StandardService.java 31 Jan 2003 21:02:08 -0000 1.2 +++ StandardService.java 17 Mar 2003 19:22:07 -0000 1.3 @@ -67,18 +67,23 @@ import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; +import javax.management.MBeanRegistration; +import javax.management.MBeanServer; +import javax.management.ObjectName; import org.apache.catalina.Connector; import org.apache.catalina.Container; import org.apache.catalina.Engine; import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleException; import org.apache.catalina.LifecycleListener; import org.apache.catalina.Server; import org.apache.catalina.Service; +import org.apache.catalina.ServerFactory; import org.apache.catalina.util.LifecycleSupport; import org.apache.catalina.util.StringManager; -import javax.management.ObjectName; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.modeler.Registry; /** @@ -91,8 +96,10 @@ */ public class StandardService - implements Lifecycle, Service { - + implements Lifecycle, Service, MBeanRegistration + { + private static Log log = LogFactory.getLog(StandardService.class); + // ----------------------------------------------------- Instance Variables @@ -497,15 +504,16 @@ // Validate and update our current component state if (started) { - throw new LifecycleException - (sm.getString("standardService.start.started")); + log.info(sm.getString("standardService.start.started")); } + + if( ! initialized ) + init(); // Notify our interested LifecycleListeners lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null); - System.out.println - (sm.getString("standardService.start.name", this.name)); + log.info(sm.getString("standardService.start.name", this.name)); lifecycle.fireLifecycleEvent(START_EVENT, null); started = true; @@ -586,18 +594,81 @@ * to bind to restricted ports under Unix operating environments. */ public void initialize() - throws LifecycleException { - if (initialized) - throw new LifecycleException ( - sm.getString("standardService.initialize.initialized")); + throws LifecycleException + { + // Service shouldn't be used with embeded, so it doesn't matter + if (initialized) { + log.info(sm.getString("standardService.initialize.initialized")); + return; + } initialized = true; + if( oname==null ) { + try { + // Hack - Server should be deprecated... + Container engine=this.getContainer(); + domain=engine.getName(); + oname=new ObjectName(domain + ":type=Service"); + Registry.getRegistry().registerComponent(this, oname, null); + } catch (Exception e) { + log.error("Error registering ",e); + } + + + } + if( server==null ) { + // Register with the server + // HACK: ServerFactory should be removed... + + ServerFactory.getServer().addService(this); + } + + // Initialize our defined Connectors synchronized (connectors) { for (int i = 0; i < connectors.length; i++) { connectors[i].initialize(); } } + } + + public void init() { + try { + initialize(); + } catch( Throwable t ) { + t.printStackTrace(); + } + } + + protected String type; + protected String domain; + protected String suffix; + protected ObjectName oname; + protected MBeanServer mserver; + + public ObjectName getObjectName() { + return oname; + } + + public String getDomain() { + return domain; + } + + public ObjectName preRegister(MBeanServer server, + ObjectName name) throws Exception { + oname=name; + mserver=server; + domain=name.getDomain(); + return name; + } + + public void postRegister(Boolean registrationDone) { + } + + public void preDeregister() throws Exception { + } + + public void postDeregister() { } } 1.2 +5 -0 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/mbeans-descriptors.xml Index: mbeans-descriptors.xml =================================================================== RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/mbeans-descriptors.xml,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- mbeans-descriptors.xml 17 Mar 2003 06:45:32 -0000 1.1 +++ mbeans-descriptors.xml 17 Mar 2003 19:22:07 -0000 1.2 @@ -499,10 +499,15 @@ description="Shutdown password" type="java.lang.String"/> + <attribute name="serviceNames" + description="Object names of all services we know about" + type="[Ljavax.management.ObjectName;"/> + <operation name="store" description="Save current state to server.xml file" impact="ACTION" returnType="void"> + </operation> </mbean>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]