You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2003/03/17 20:22:07 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core StandardServer.java StandardService.java mbeans-descriptors.xml

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: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org