Author: markt
Date: Sun Mar  7 21:30:32 2010
New Revision: 920122

URL: http://svn.apache.org/viewvc?rev=920122&view=rev
Log:
Lifecycle refactoring - ContainerBase
Adds a new CONFIGURE event to allow Context to fire the START event at the 
right time
Context fires START a little later
ReplicatedContext takes advantage of LifecycleBase ensuring start() is only 
called once

Modified:
    tomcat/trunk/java/org/apache/catalina/Context.java
    tomcat/trunk/java/org/apache/catalina/Lifecycle.java
    tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
    tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
    tomcat/trunk/java/org/apache/catalina/core/StandardEngine.java
    tomcat/trunk/java/org/apache/catalina/core/StandardHost.java
    tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
    tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
    tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
    tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java
    tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java

Modified: tomcat/trunk/java/org/apache/catalina/Context.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Context.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Context.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Context.java Sun Mar  7 21:30:32 2010
@@ -119,14 +119,6 @@
 
 
     /**
-     * Set the application available flag for this Context.
-     *
-     * @param available The new application available flag
-     */
-    public void setAvailable(boolean available);
-
-
-    /**
      * Return the Locale to character set mapper for this Context.
      */
     public CharsetMapper getCharsetMapper();

Modified: tomcat/trunk/java/org/apache/catalina/Lifecycle.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Lifecycle.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/Lifecycle.java (original)
+++ tomcat/trunk/java/org/apache/catalina/Lifecycle.java Sun Mar  7 21:30:32 
2010
@@ -127,6 +127,15 @@
     public static final String PERIODIC_EVENT = "periodic";
 
 
+    /**
+     * The LifecycleEvent type for the "configure" event. Use by those
+     * components that use a separate component to perform configuration and
+     * need to signal when configuration should be performed - usually after
+     * {...@link #BEFORE_START_EVENT} and before {...@link #START_EVENT}.
+     */
+    public static final String CONFIGURE_EVENT = "configure";
+
+    
     // --------------------------------------------------------- Public Methods
 
 
@@ -208,7 +217,5 @@
      * 
      * @return The current state of the source component.
      */
-    // TODO Remove this comment once all components that implement Lifecycle
-    //      have had this method added
-    //public LifecycleState getState();
+    public LifecycleState getState();
 }

Modified: tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/ContainerBase.java Sun Mar  7 
21:30:32 2010
@@ -44,7 +44,7 @@
 import org.apache.catalina.Globals;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
-import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.LifecycleState;
 import org.apache.catalina.Loader;
 import org.apache.catalina.Manager;
 import org.apache.catalina.Pipeline;
@@ -52,7 +52,7 @@
 import org.apache.catalina.Valve;
 import org.apache.catalina.connector.Request;
 import org.apache.catalina.connector.Response;
-import org.apache.catalina.util.LifecycleSupport;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -122,7 +122,7 @@
  * @author Craig R. McClanahan
  */
 
-public abstract class ContainerBase
+public abstract class ContainerBase extends LifecycleBase
     implements Container, MBeanRegistration {
 
     private static final org.apache.juli.logging.Log log=
@@ -168,12 +168,6 @@
 
 
     /**
-     * The lifecycle event support for this component.
-     */
-    protected LifecycleSupport lifecycle = new LifecycleSupport(this);
-
-
-    /**
      * The container event listeners for this Container.
      */
     protected ArrayList<ContainerListener> listeners = new 
ArrayList<ContainerListener>();
@@ -254,10 +248,8 @@
 
 
     /**
-     * Has this component been started?
+     * Has this component been initialized?
      */
-    protected boolean started = false;
-
     protected boolean initialized=false;
 
     /**
@@ -352,7 +344,7 @@
         this.loader = loader;
 
         // Stop the old component if necessary
-        if (started && (oldLoader != null) &&
+        if (getState().isAvailable() && (oldLoader != null) &&
             (oldLoader instanceof Lifecycle)) {
             try {
                 ((Lifecycle) oldLoader).stop();
@@ -364,7 +356,7 @@
         // Start the new component if necessary
         if (loader != null)
             loader.setContainer(this);
-        if (started && (loader != null) &&
+        if (getState().isAvailable() && (loader != null) &&
             (loader instanceof Lifecycle)) {
             try {
                 ((Lifecycle) loader).start();
@@ -422,7 +414,7 @@
         this.manager = manager;
 
         // Stop the old component if necessary
-        if (started && (oldManager != null) &&
+        if (getState().isAvailable() && (oldManager != null) &&
             (oldManager instanceof Lifecycle)) {
             try {
                 ((Lifecycle) oldManager).stop();
@@ -434,7 +426,7 @@
         // Start the new component if necessary
         if (manager != null)
             manager.setContainer(this);
-        if (started && (manager != null) &&
+        if (getState().isAvailable() && (manager != null) &&
             (manager instanceof Lifecycle)) {
             try {
                 ((Lifecycle) manager).start();
@@ -486,7 +478,7 @@
         this.cluster = cluster;
 
         // Stop the old component if necessary
-        if (started && (oldCluster != null) &&
+        if (getState().isAvailable() && (oldCluster != null) &&
             (oldCluster instanceof Lifecycle)) {
             try {
                 ((Lifecycle) oldCluster).stop();
@@ -499,7 +491,7 @@
         if (cluster != null)
             cluster.setContainer(this);
 
-        if (started && (cluster != null) &&
+        if (getState().isAvailable() && (cluster != null) &&
             (cluster instanceof Lifecycle)) {
             try {
                 ((Lifecycle) cluster).start();
@@ -675,7 +667,7 @@
         this.realm = realm;
 
         // Stop the old component if necessary
-        if (started && (oldRealm != null) &&
+        if (getState().isAvailable() && (oldRealm != null) &&
             (oldRealm instanceof Lifecycle)) {
             try {
                 ((Lifecycle) oldRealm).stop();
@@ -687,7 +679,7 @@
         // Start the new component if necessary
         if (realm != null)
             realm.setContainer(this);
-        if (started && (realm != null) &&
+        if (getState().isAvailable() && (realm != null) &&
             (realm instanceof Lifecycle)) {
             try {
                 ((Lifecycle) realm).start();
@@ -787,7 +779,7 @@
             children.put(child.getName(), child);
 
             // Start child
-            if (started && startChildren) {
+            if (getState().isAvailable() && startChildren) {
                 boolean success = false;
                 try {
                     child.start();
@@ -919,13 +911,9 @@
             children.remove(child.getName());
         }
         
-        if (started) {
+        if (getState().isAvailable()) {
             try {
-                if( child instanceof ContainerBase ) {
-                    if( ((ContainerBase)child).started ) {
-                        child.stop();
-                    }
-                } else {
+                if (child.getState().isAvailable()) {
                     child.stop();
                 }
             } catch (LifecycleException e) {
@@ -966,63 +954,15 @@
     }
 
 
-    // ------------------------------------------------------ Lifecycle Methods
-
-
-    /**
-     * Add a lifecycle event listener to this component.
-     *
-     * @param listener The listener to add
-     */
-    public void addLifecycleListener(LifecycleListener listener) {
-
-        lifecycle.addLifecycleListener(listener);
-
-    }
-
-
-    /**
-     * Get the lifecycle listeners associated with this lifecycle. If this 
-     * Lifecycle has no listeners registered, a zero-length array is returned.
-     */
-    public LifecycleListener[] findLifecycleListeners() {
-
-        return lifecycle.findLifecycleListeners();
-
-    }
-
-
-    /**
-     * Remove a lifecycle event listener from this component.
-     *
-     * @param listener The listener to remove
-     */
-    public void removeLifecycleListener(LifecycleListener listener) {
-
-        lifecycle.removeLifecycleListener(listener);
-
-    }
-
-
     /**
-     * Prepare for active use of the public methods of this Component.
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
      *
      * @exception LifecycleException if this component detects a fatal error
-     *  that prevents it from being started
+     *  that prevents this component from being used
      */
-    public synchronized void start() throws LifecycleException {
-
-        // Validate and update our current component state
-        if (started) {
-            if(log.isInfoEnabled())
-                log.info(sm.getString("containerBase.alreadyStarted", 
logName()));
-            return;
-        }
-        
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null);
-
-        started = true;
+    @Override
+    protected synchronized void startInternal() throws LifecycleException {
 
         // Start our subordinate components, if any
         if ((loader != null) && (loader instanceof Lifecycle))
@@ -1050,42 +990,29 @@
         if (pipeline instanceof Lifecycle)
             ((Lifecycle) pipeline).start();
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(START_EVENT, null);
+
+        setState(LifecycleState.STARTING);
 
         // Start our thread
         threadStart();
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null);
-
     }
 
 
     /**
-     * Gracefully shut down active use of the public methods of this Component.
+     * Stop this component and implement the requirements
+     * of {...@link LifecycleBase#stopInternal()}.
      *
      * @exception LifecycleException if this component detects a fatal error
-     *  that needs to be reported
+     *  that prevents this component from being used
      */
-    public synchronized void stop() throws LifecycleException {
-
-        // Validate and update our current component state
-        if (!started) {
-            if(log.isInfoEnabled())
-                log.info(sm.getString("containerBase.notStarted", logName()));
-            return;
-        }
-
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, null);
+    @Override
+    protected synchronized void stopInternal() throws LifecycleException {
 
         // Stop our thread
         threadStop();
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(STOP_EVENT, null);
-        started = false;
+        setState(LifecycleState.STOPPING);
 
         // Stop the Valves in our pipeline (including the basic), if any
         if (pipeline instanceof Lifecycle) {
@@ -1122,10 +1049,6 @@
         if ((loader != null) && (loader instanceof Lifecycle)) {
             ((Lifecycle) loader).stop();
         }
-
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null);
-
     }
 
     /** Init method, part of the MBean lifecycle.
@@ -1160,7 +1083,7 @@
     }
     
     public void destroy() throws Exception {
-        if( started ) {
+        if (getState().isAvailable()) {
             stop();
         }
         initialized=false;
@@ -1224,7 +1147,7 @@
      */
     public void backgroundProcess() {
         
-        if (!started)
+        if (!getState().isAvailable())
             return;
 
         if (cluster != null) {
@@ -1264,7 +1187,7 @@
             }
             current = current.getNext();
         }
-        lifecycle.fireLifecycleEvent(Lifecycle.PERIODIC_EVENT, null);
+        fireLifecycleEvent(Lifecycle.PERIODIC_EVENT, null);
     }
 
 

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardContext.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardContext.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardContext.java Sun Mar  7 
21:30:32 2010
@@ -69,6 +69,7 @@
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.LifecycleState;
 import org.apache.catalina.Loader;
 import org.apache.catalina.Manager;
 import org.apache.catalina.Pipeline;
@@ -92,6 +93,7 @@
 import org.apache.catalina.startup.TldConfig;
 import org.apache.catalina.util.CharsetMapper;
 import org.apache.catalina.util.ExtensionValidator;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.catalina.util.RequestUtil;
 import org.apache.catalina.util.URLEncoder;
 import org.apache.juli.logging.Log;
@@ -235,11 +237,6 @@
     
 
     /**
-     * The application available flag for this Context.
-     */
-    private boolean available = false;
-    
-    /**
      * The broadcaster that sends j2ee notifications. 
      */
     private NotificationBroadcasterSupport broadcaster = null;
@@ -1133,23 +1130,8 @@
      */
     public boolean getAvailable() {
 
-        return (this.available);
-
-    }
-
-
-    /**
-     * Set the application available flag for this Context.
-     *
-     * @param available The new application available flag
-     */
-    public void setAvailable(boolean available) {
-
-        boolean oldAvailable = this.available;
-        this.available = available;
-        support.firePropertyChange("available",
-                                   oldAvailable,
-                                   this.available);
+        // TODO Remove this method entirely
+        return getState().isAvailable();
 
     }
 
@@ -2020,7 +2002,7 @@
     @Override
     public synchronized void setResources(DirContext resources) {
 
-        if (started) {
+        if (getState().isAvailable()) {
             throw new IllegalStateException
                 (sm.getString("standardContext.resources.started"));
         }
@@ -2129,7 +2111,7 @@
 
         this.workDir = workDir;
 
-        if (started) {
+        if (getState().isAvailable()) {
             postWorkDirectory();
         }
     }
@@ -3331,7 +3313,7 @@
     public synchronized void reload() {
 
         // Validate our current component state
-        if (!started)
+        if (!getState().isAvailable())
             throw new IllegalStateException
                 (sm.getString("containerBase.notStarted", logName()));
 
@@ -4325,18 +4307,15 @@
 
 
     /**
-     * Start this Context component.
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
      *
-     * @exception LifecycleException if a startup error occurs
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
     @Override
-    public synchronized void start() throws LifecycleException {
-        //if (lazy ) return;
-        if (started) {
-            if(log.isInfoEnabled())
-                log.info(sm.getString("containerBase.alreadyStarted", 
logName()));
-            return;
-        }
+    protected synchronized void startInternal() throws LifecycleException {
+
         if( !initialized ) { 
             try {
                 init();
@@ -4357,10 +4336,6 @@
             Registry.getRegistry(null, null).unregisterComponent(oname);
         }
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(BEFORE_START_EVENT, null);
-
-        setAvailable(false);
         setConfigured(false);
         boolean ok = true;
 
@@ -4461,8 +4436,6 @@
 
             if (ok) {
                 
-                started = true;
-
                 // Start our subordinate components, if any
                 if ((loader != null) && (loader instanceof Lifecycle))
                     ((Lifecycle) loader).start();
@@ -4500,7 +4473,7 @@
                 }
                 
                 // Notify our interested LifecycleListeners
-                lifecycle.fireLifecycleEvent(START_EVENT, null);
+                fireLifecycleEvent(Lifecycle.CONFIGURE_EVENT, null);
                 
                 // Acquire clustered manager
                 Manager contextManager = null;
@@ -4585,11 +4558,6 @@
                 postWelcomeFiles();
             }
             
-            if (ok) {
-                // Notify our interested LifecycleListeners
-                lifecycle.fireLifecycleEvent(AFTER_START_EVENT, null);
-            }
-            
             // Configure and call application event listeners
             if (ok) {
                 if (!listenerStart()) {
@@ -4633,15 +4601,8 @@
         if (ok) {
             if (log.isDebugEnabled())
                 log.debug("Starting completed");
-            setAvailable(true);
         } else {
             log.error(sm.getString("standardContext.startFailed", getName()));
-            try {
-                stop();
-            } catch (Throwable t) {
-                log.error(sm.getString("standardContext.startCleanup"), t);
-            }
-            setAvailable(false);
         }
 
         // JMX registration
@@ -4664,11 +4625,11 @@
         }
 
         // Reinitializing if something went wrong
-        if (!ok && started) {
-            stop();
+        if (!ok) {
+            setState(LifecycleState.FAILED);
+        } else {
+            setState(LifecycleState.STARTING);
         }
-
-        //cacheContext();
     }
 
     private Map<String, Map<String, String>> buildInjectionMap(NamingResources 
namingResources) {
@@ -4714,23 +4675,15 @@
     }
 
     /**
-     * Stop this Context component.
+     * Stop this component and implement the requirements
+     * of {...@link LifecycleBase#stopInternal()}.
      *
-     * @exception LifecycleException if a shutdown error occurs
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
     @Override
-    public synchronized void stop() throws LifecycleException {
-
-        // Validate and update our current component state
-        if (!started) {
-            if(log.isInfoEnabled())
-                log.info(sm.getString("containerBase.notStarted", logName()));
-            return;
-        }
+    protected synchronized void stopInternal() throws LifecycleException {
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(BEFORE_STOP_EVENT, null);
-        
         // Send j2ee.state.stopping notification 
         if (this.getObjectName() != null) {
             Notification notification = 
@@ -4739,8 +4692,7 @@
             broadcaster.sendNotification(notification);
         }
         
-        // Mark this application as unavailable while we shut down
-        setAvailable(false);
+        setState(LifecycleState.STOPPING);
 
         // Binding thread
         ClassLoader oldCCL = bindThread();
@@ -4772,9 +4724,6 @@
             // Normal container shutdown processing
             if (log.isDebugEnabled())
                 log.debug("Processing standard container shutdown");
-            // Notify our interested LifecycleListeners
-            lifecycle.fireLifecycleEvent(STOP_EVENT, null);
-            started = false;
 
             // Stop the Valves in our pipeline (including the basic), if any
             if (pipeline instanceof Lifecycle) {
@@ -4829,9 +4778,6 @@
         //reset the instance manager
         instanceManager = null;
 
-        // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(AFTER_STOP_EVENT, null);
-
         if (log.isDebugEnabled())
             log.debug("Stopping complete");
 
@@ -4861,7 +4807,7 @@
         super.destroy();
 
         // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(DESTROY_EVENT, null);
+        fireLifecycleEvent(DESTROY_EVENT, null);
 
         synchronized (instanceListenersLock) {
             instanceListeners = new String[0];
@@ -5470,7 +5416,7 @@
 
     @Override
     public void preDeregister() throws Exception {
-        if( started ) {
+        if (getState().isAvailable()) {
             try {
                 stop();
             } catch( Exception ex ) {
@@ -5542,7 +5488,7 @@
         super.init();
         
         // Notify our interested LifecycleListeners
-        lifecycle.fireLifecycleEvent(INIT_EVENT, null);
+        fireLifecycleEvent(INIT_EVENT, null);
 
         // Send j2ee.state.starting notification 
         if (this.getObjectName() != null) {

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardEngine.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardEngine.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardEngine.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardEngine.java Sun Mar  7 
21:30:32 2010
@@ -33,6 +33,7 @@
 import org.apache.catalina.Realm;
 import org.apache.catalina.Service;
 import org.apache.catalina.realm.JAASRealm;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.catalina.util.ServerInfo;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -404,15 +405,15 @@
     }
     
     /**
-     * Start this Engine component.
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
      *
-     * @exception LifecycleException if a startup error occurs
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
     @Override
-    public void start() throws LifecycleException {
-        if( started ) {
-            return;
-        }
+    protected synchronized void startInternal() throws LifecycleException {
+        
         if( !initialized ) {
             init();
         }
@@ -448,13 +449,22 @@
         }
 
         // Standard container startup
-        super.start();
-
+        super.startInternal();
     }
+
     
+    /**
+     * Stop this component and implement the requirements
+     * of {...@link LifecycleBase#stopInternal()}.
+     *
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
+     */
     @Override
-    public void stop() throws LifecycleException {
-        super.stop();
+    protected synchronized void stopInternal() throws LifecycleException {
+        
+        super.stopInternal();
+
         if( mbeans != null ) {
             try {
                 Registry.getRegistry(null, null).invoke(mbeans, "stop", false);

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHost.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHost.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardHost.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardHost.java Sun Mar  7 
21:30:32 2010
@@ -37,6 +37,7 @@
 import org.apache.catalina.Valve;
 import org.apache.catalina.loader.WebappClassLoader;
 import org.apache.catalina.startup.HostConfig;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.catalina.valves.ValveBase;
 import org.apache.tomcat.util.modeler.Registry;
 
@@ -764,16 +765,15 @@
     }
     
     /**
-     * Start this host.
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
      *
      * @exception LifecycleException if this component detects a fatal error
-     *  that prevents it from being started
+     *  that prevents this component from being used
      */
     @Override
-    public synchronized void start() throws LifecycleException {
-        if( started ) {
-            return;
-        }
+    protected synchronized void startInternal() throws LifecycleException {
+        
         if( ! initialized )
             init();
 
@@ -824,8 +824,8 @@
             else
                 log.debug(sm.getString("standardHost.validationDisabled"));
         }
-        super.start();
-
+        
+        super.startInternal();
     }
 
 

Modified: tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardWrapper.java Sun Mar  7 
21:30:32 2010
@@ -57,6 +57,7 @@
 import org.apache.catalina.security.SecurityUtil;
 import org.apache.catalina.util.Enumerator;
 import org.apache.catalina.util.InstanceSupport;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.tomcat.InstanceManager;
 import org.apache.tomcat.PeriodicEventListener;
 import org.apache.tomcat.util.log.SystemLogHandler;
@@ -675,7 +676,7 @@
     public void backgroundProcess() {
         super.backgroundProcess();
         
-        if (!started)
+        if (!getState().isAvailable())
             return;
         
         if (getServlet() != null && (getServlet() instanceof 
PeriodicEventListener)) {
@@ -1613,13 +1614,14 @@
 
 
     /**
-     * Start this component, pre-loading the servlet if the load-on-startup
-     * value is set appropriately.
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
      *
-     * @exception LifecycleException if a fatal error occurs during startup
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
     @Override
-    public void start() throws LifecycleException {
+    protected synchronized void startInternal() throws LifecycleException {
     
         // Send j2ee.state.starting notification 
         if (this.getObjectName() != null) {
@@ -1630,7 +1632,7 @@
         }
         
         // Start up this component
-        super.start();
+        super.startInternal();
 
         if( oname != null )
             registerJMX((StandardContext)getParent());
@@ -1652,13 +1654,14 @@
 
 
     /**
-     * Stop this component, gracefully shutting down the servlet if it has
-     * been initialized.
+     * Stop this component and implement the requirements
+     * of {...@link LifecycleBase#stopInternal()}.
      *
-     * @exception LifecycleException if a fatal error occurs during shutdown
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
     @Override
-    public void stop() throws LifecycleException {
+    protected synchronized void stopInternal() throws LifecycleException {
 
         setAvailable(Long.MAX_VALUE);
         
@@ -1679,7 +1682,7 @@
         }
 
         // Shut down this component
-        super.stop();
+        super.stopInternal();
 
         // Send j2ee.state.stoppped notification 
         if (this.getObjectName() != null) {

Modified: 
tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/context/ReplicatedContext.java Sun 
Mar  7 21:30:32 2010
@@ -26,11 +26,10 @@
 import org.apache.catalina.Globals;
 import javax.servlet.ServletContext;
 import java.util.AbstractMap;
-import org.apache.catalina.LifecycleEvent;
-import org.apache.catalina.LifecycleListener;
 import java.util.Enumeration;
 import java.util.concurrent.ConcurrentHashMap;
 import org.apache.catalina.util.Enumerator;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.catalina.tribes.tipis.AbstractReplicatedMap.MapOwner;
 
 import org.apache.juli.logging.Log;
@@ -40,20 +39,21 @@
  * @author Filip Hanik
  * @version 1.0
  */
-public class ReplicatedContext extends StandardContext implements 
LifecycleListener,MapOwner {
+public class ReplicatedContext extends StandardContext implements MapOwner {
     private int mapSendOptions = Channel.SEND_OPTIONS_DEFAULT;
     private static final Log log = LogFactory.getLog( ReplicatedContext.class 
);
-    protected boolean startComplete = false;
     protected static long DEFAULT_REPL_TIMEOUT = 15000;//15 seconds
     
-    public void lifecycleEvent(LifecycleEvent event) {
-        if (AFTER_START_EVENT.equals(event.getType())) 
-            startComplete = true;
-    }
-
+    /**
+     * Start this component and implement the requirements
+     * of {...@link LifecycleBase#startInternal()}.
+     *
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
+     */
     @Override
-    public synchronized void start() throws LifecycleException {
-        if ( this.started ) return;
+    protected synchronized void startInternal() throws LifecycleException {
+
         if( !initialized ) { 
             try {
                 init();
@@ -61,7 +61,7 @@
                 throw new LifecycleException("Error initializaing ", ex);
             }
         }
-        super.addLifecycleListener(this);            
+
         try {
             CatalinaCluster catclust = (CatalinaCluster)this.getCluster();
             if (this.context == null) this.context = new ReplApplContext(this);
@@ -72,33 +72,30 @@
                 ((ReplApplContext)this.context).setAttributeMap(map);
                 if (getAltDDName() != null) 
context.setAttribute(Globals.ALT_DD_ATTR, getAltDDName());
             }
-            super.start();
+            super.startInternal();
         }  catch ( Exception x ) {
             log.error("Unable to start ReplicatedContext",x);
             throw new LifecycleException("Failed to start 
ReplicatedContext",x);
         }
     }
     
+    /**
+     * Stop this component and implement the requirements
+     * of {...@link LifecycleBase#stopInternal()}.
+     *
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
+     */
     @Override
-    public synchronized void stop() throws LifecycleException
-    {
-        if ( !this.started ) return;
+    protected synchronized void stopInternal() throws LifecycleException {
+        
+        super.stopInternal();
+
         AbstractMap<String,Object> map =
             ((ReplApplContext)this.context).getAttributeMap();
         if ( map!=null && map instanceof ReplicatedMap) {
             ((ReplicatedMap)map).breakdown();
         }
-        try {
-            super.lifecycle.removeLifecycleListener(this);
-        } catch ( Exception x ){
-            log.error("Unable to stop ReplicatedContext",x);
-            throw new LifecycleException("Failed to stop ReplicatedContext",x);
-        } finally {
-            this.startComplete = false;
-            super.stop();
-        }
-        
-
     }
 
 
@@ -169,7 +166,7 @@
         
         @Override
         public void setAttribute(String name, Object value) {
-            if ( (!getParent().startComplete) || 
"org.apache.jasper.runtime.JspApplicationContextImpl".equals(name) ){
+            if ( (!getParent().getState().isAvailable()) || 
"org.apache.jasper.runtime.JspApplicationContextImpl".equals(name) ){
                 tomcatAttributes.put(name,value);
             } else
                 super.setAttribute(name,value);

Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Sun Mar  7 
21:30:32 2010
@@ -284,8 +284,8 @@
         }
 
         // Process the event that has occurred
-        if (event.getType().equals(Lifecycle.START_EVENT)) {
-            start();
+        if (event.getType().equals(Lifecycle.CONFIGURE_EVENT)) {
+            configure();
         } else if (event.getType().equals(Lifecycle.BEFORE_START_EVENT)) {
             beforeStart();
         } else if (event.getType().equals(Lifecycle.AFTER_START_EVENT)) {
@@ -821,9 +821,9 @@
     
     
     /**
-     * Process a "start" event for this Context.
+     * Process a "contextConfig" event for this Context.
      */
-    protected synchronized void start() {
+    protected synchronized void configure() {
         // Called from StandardContext.start()
 
         if (log.isDebugEnabled())

Modified: tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java Sun Mar  7 
21:30:32 2010
@@ -569,7 +569,7 @@
         
         if (event.getType().equals(Lifecycle.INIT_EVENT)) {
             init();
-        } else if (event.getType().equals(Lifecycle.START_EVENT)) {
+        } else if (event.getType().equals(Lifecycle.CONFIGURE_EVENT)) {
             try {
                 execute();
             } catch (Exception e) {

Modified: tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java?rev=920122&r1=920121&r2=920122&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java Sun Mar  7 
21:30:32 2010
@@ -676,7 +676,7 @@
         public void lifecycleEvent(LifecycleEvent event) {
             try {
                 Context context = (Context) event.getLifecycle();
-                if (event.getType().equals(Lifecycle.START_EVENT)) {
+                if (event.getType().equals(Lifecycle.CONFIGURE_EVENT)) {
                     context.setConfigured(true);
                 }
             } catch (ClassCastException e) {



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

Reply via email to