You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2010/05/02 20:47:56 UTC

svn commit: r940298 - in /tomcat/trunk/java/org/apache/catalina/core: LocalStrings.properties StandardService.java

Author: markt
Date: Sun May  2 18:47:56 2010
New Revision: 940298

URL: http://svn.apache.org/viewvc?rev=940298&view=rev
Log:
Add LifecycleMBeanRegistration
Align init() and destroy()
Executors and Connectors need to handle their own (de)registration

Modified:
    tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/core/StandardService.java

Modified: tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties?rev=940298&r1=940297&r2=940298&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/core/LocalStrings.properties Sun May  2 18:47:56 2010
@@ -190,8 +190,10 @@ standardHost.validationEnabled=XML valid
 standardHost.validationDisabled=XML validation disabled
 standardServer.onameFail=MBean name specified for Server [{0}] is not valid
 standardServer.shutdownViaPort=A valid shutdown command was received via the shutdown port. Stopping the Server instance.
-standardService.connector.failed=Failed to start connector [{0}]
+standardService.connector.initFailed=Failed to initialise connector [{0}]
+standardService.connector.destroyFailed=Failed to destroy connector [{0}]
 standardService.initialize.failed=Service initializing at {0} failed
+standardService.onameFail=MBean name specified for Service [{0}] is not valid
 standardService.register.failed=Error registering Service at domain {0}
 standardService.start.name=Starting service {0}
 standardService.stop.name=Stopping service {0}

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardService.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardService.java?rev=940298&r1=940297&r2=940298&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardService.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardService.java Sun May  2 18:47:56 2010
@@ -21,13 +21,15 @@ package org.apache.catalina.core;
 
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
-import javax.management.MBeanRegistration;
 import javax.management.MBeanServer;
+import javax.management.MalformedObjectNameException;
 import javax.management.ObjectName;
 import org.apache.catalina.Container;
 import org.apache.catalina.Engine;
+import org.apache.catalina.Globals;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
+import org.apache.catalina.LifecycleMBeanRegistration;
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.Server;
 import org.apache.catalina.Service;
@@ -50,7 +52,7 @@ import org.apache.catalina.Executor;
  */
 
 public class StandardService extends LifecycleBase
-        implements Service, MBeanRegistration {
+        implements Service, LifecycleMBeanRegistration {
 
     private static final Log log = LogFactory.getLog(StandardService.class);
    
@@ -503,19 +505,6 @@ public class StandardService extends Lif
                 executors.get(i).stop();
             }
         }
-
-
-        Registry.getRegistry(null, null).unregisterComponent(oname);
-        Executor[] executors = findExecutors();
-        for (int i = 0; i < executors.length; i++) {
-            try {
-                ObjectName executorObjectName = 
-                    new ObjectName(domain + ":type=Executor,name=" + executors[i].getName());
-                Registry.getRegistry(null, null).unregisterComponent(executorObjectName);
-            } catch (Exception e) {
-                // Ignore (invalid ON, which cannot happen)
-            }
-        }
     }
 
 
@@ -526,84 +515,117 @@ public class StandardService extends Lif
     @Override
     protected void initInternal() throws LifecycleException {
 
-        if( oname==null ) {
-            try {
-                // Hack - Server should be deprecated...
-                Container engine=this.getContainer();
-                domain = engine.getName();
-                oname=new ObjectName(domain + ":type=Service");
-                Registry.getRegistry(null, null)
-                    .registerComponent(this, oname, null);
-                
-                Executor[] executors = findExecutors();
-                for (int i = 0; i < executors.length; i++) {
-                    ObjectName executorObjectName = 
-                        new ObjectName(domain + ":type=Executor,name=" + executors[i].getName());
-                    Registry.getRegistry(null, null)
-                        .registerComponent(executors[i], executorObjectName, null);
-                }
-                
-            } catch (Exception e) {
-                log.error(sm.getString("standardService.register.failed",domain),e);
-            }
-            
-            
+        if (container != null) {
+            container.init();
         }
-        if( server==null ) {
-            // If no server was defined - create one
-            server = new StandardServer();
-            server.addService(this);
+
+        // Initialize any Executors
+        for (Executor executor : findExecutors()) {
+            executor.init();
         }
-               
 
         // Initialize our defined Connectors
         synchronized (connectors) {
-                for (int i = 0; i < connectors.length; i++) {
-                    try {
-                        connectors[i].init();
-                    } catch (Exception e) {
-                        log.error(sm.getString(
-                                "standardService.connector.failed",
-                                connectors[i]), e);
-                    }
+            for (Connector connector : connectors) {
+                try {
+                    connector.init();
+                } catch (Exception e) {
+                    log.error(sm.getString(
+                            "standardService.connector.initFailed", connector),
+                            e);
                 }
+            }
         }
     }
     
     @Override
-    protected void destroyInternal() {
-        // FIXME unregister should be here probably -- stop doing that ?
-    }
+    protected void destroyInternal() throws LifecycleException {
+        Registry.getRegistry(null, null).unregisterComponent(oname);
+        
+        // Destroy our defined Connectors
+        synchronized (connectors) {
+            for (Connector connector : connectors) {
+                try {
+                    connector.destroy();
+                } catch (Exception e) {
+                    log.error(sm.getString(
+                            "standardService.connector.destroyfailed",
+                            connector), e);
+                }
+            }
+        }
 
-    protected String type;
-    protected String domain;
-    protected String suffix;
-    protected ObjectName oname;
-    protected MBeanServer mserver;
+        // Destroy any Executors
+        for (Executor executor : findExecutors()) {
+            executor.destroy();
+        }
+
+        if (container != null) {
+            container.destroy();
+        }
 
-    public ObjectName getObjectName() {
-        return oname;
     }
 
+    protected volatile String domain;
+    protected volatile ObjectName oname;
+
+    /**
+     * Obtain the MBean domain for this server. The domain is obtained using
+     * the following search order:
+     * <ol>
+     * <li>Name of the {@link Engine}.</li>
+     * <li>Name of the {@link Service}.</li>
+     * <li>Global default defined by {@link Globals#DEFAULT_MBEAN_DOMAIN}</li>
+     * </ol>
+     */
     public String getDomain() {
+        if (domain == null) {
+            Container container = getContainer();
+            if (container != null) {
+                domain = container.getName();
+            } else {
+                domain = getName();
+            }
+            if (domain == null) {
+                domain = Globals.DEFAULT_MBEAN_DOMAIN;
+            }
+        }
         return domain;
     }
 
+    public ObjectName getObjectName() {
+        if (oname == null) {
+            StringBuilder name = new StringBuilder(getDomain());
+            name.append(":type=Service");
+            
+            try {
+                oname = new ObjectName(name.toString());
+            } catch (MalformedObjectNameException e) {
+                log.warn(sm.getString("standardService.onameFail", name), e);
+            } catch (NullPointerException e) {
+                // Never going to happen
+            }
+        }
+        
+        return oname;
+    }
     public ObjectName preRegister(MBeanServer server,
                                   ObjectName name) throws Exception {
         oname=name;
-        mserver=server;
         domain=name.getDomain();
         return name;
     }
 
     public void postRegister(Boolean registrationDone) {
+        // NOOP
     }
 
     public void preDeregister() throws Exception {
+        // NOOP
     }
 
     public void postDeregister() {
+        // NOOP
     }
 
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org