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/03/05 15:49:39 UTC

svn commit: r919434 - in /tomcat/trunk/java/org/apache/catalina/loader: VirtualWebappLoader.java WebappClassLoader.java WebappLoader.java

Author: markt
Date: Fri Mar  5 14:49:39 2010
New Revision: 919434

URL: http://svn.apache.org/viewvc?rev=919434&view=rev
Log:
Lifecycle refactoring
o.a.c.loader - Note WebappClassloader only has a stubbed Lifecycle implementation

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java

Modified: tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java?rev=919434&r1=919433&r2=919434&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java Fri Mar  5 14:49:39 2010
@@ -20,6 +20,7 @@
 import java.util.StringTokenizer;
 
 import org.apache.catalina.LifecycleException;
+import org.apache.catalina.util.LifecycleBase;
 
 /**
  * Simple webapp classloader that allows a customized classpath to be added
@@ -80,8 +81,15 @@
         virtualClasspath = path;
     }
 
+    /**
+     * 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 void start() throws LifecycleException {
+    protected void startInternal() throws LifecycleException {
 
         // just add any jar/directory set in virtual classpath to the
         // repositories list before calling start on the standard WebappLoader
@@ -94,7 +102,7 @@
             addRepository(file.toURI().toString());
         }
 
-        super.start();
+        super.startInternal();
     }
 
 }

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=919434&r1=919433&r2=919434&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Mar  5 14:49:39 2010
@@ -68,6 +68,7 @@
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleListener;
+import org.apache.catalina.LifecycleState;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.jasper.servlet.JasperLoader;
 import org.apache.naming.JndiPermission;
@@ -107,6 +108,9 @@
  * <p>
  * <strong>IMPLEMENTATION NOTE</strong> - No check for sealing violations or
  * security is made unless a security manager is present.
+ * <p>
+ * TODO: Is there any requirement to provide a proper Lifecycle implementation
+ *       rather than the current stubbed implementation?
  *
  * @author Remy Maucherat
  * @author Craig R. McClanahan
@@ -1641,6 +1645,16 @@
 
 
     /**
+     * Obtain the current state of the source component.
+     * 
+     * @return The current state of the source component.
+     */
+    public LifecycleState getState() {
+        return LifecycleState.NEW;
+    }
+
+
+    /**
      * Start the class loader.
      *
      * @exception LifecycleException if a lifecycle error occurs

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=919434&r1=919433&r2=919434&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Fri Mar  5 14:49:39 2010
@@ -51,10 +51,10 @@
 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.core.StandardContext;
-import org.apache.catalina.util.LifecycleSupport;
+import org.apache.catalina.util.LifecycleBase;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.naming.resources.DirContextURLStreamHandler;
 import org.apache.naming.resources.DirContextURLStreamHandlerFactory;
@@ -80,8 +80,8 @@
  * @version $Revision$ $Date$
  */
 
-public class WebappLoader
-    implements Lifecycle, Loader, PropertyChangeListener, MBeanRegistration  {
+public class WebappLoader extends LifecycleBase
+    implements Loader, PropertyChangeListener, MBeanRegistration  {
 
     // ----------------------------------------------------------- Constructors
 
@@ -145,12 +145,6 @@
 
 
     /**
-     * The lifecycle event support for this component.
-     */
-    protected LifecycleSupport lifecycle = new LifecycleSupport(this);
-
-
-    /**
      * The Java class name of the ClassLoader implementation to be used.
      * This class should extend WebappClassLoader, otherwise, a different 
      * loader implementation must be used.
@@ -185,12 +179,6 @@
 
 
     /**
-     * Has this component been started?
-     */
-    private boolean started = false;
-
-
-    /**
      * The property change support for this component.
      */
     protected PropertyChangeSupport support = new PropertyChangeSupport(this);
@@ -379,7 +367,7 @@
         results[repositories.length] = repository;
         repositories = results;
 
-        if (started && (classLoader != null)) {
+        if (getState().isAvailable() && (classLoader != null)) {
             classLoader.addRepository(repository);
             if( loaderRepositories != null ) loaderRepositories.add(repository);
             setClassPath();
@@ -515,43 +503,6 @@
     }
 
 
-    // ------------------------------------------------------ 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);
-
-    }
-
     private boolean initialized=false;
 
     public void init() {
@@ -595,25 +546,26 @@
     }
 
     /**
-     * Start this component, initializing our associated class loader.
+     * Start associated {@link ClassLoader} and implement the requirements
+     * of {@link LifecycleBase#startInternal()}.
      *
-     * @exception LifecycleException if a lifecycle error occurs
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
-    public void start() throws LifecycleException {
-        // Validate and update our current component state
+    @Override
+    protected void startInternal() throws LifecycleException {
+
         if( ! initialized ) init();
-        if (started)
-            throw new LifecycleException
-                (sm.getString("webappLoader.alreadyStarted"));
+
         if (log.isDebugEnabled())
             log.debug(sm.getString("webappLoader.starting"));
-        lifecycle.fireLifecycleEvent(START_EVENT, null);
-        started = true;
 
         if (container.getResources() == null) {
             log.info("No resources for " + container);
+            setState(LifecycleState.STARTING);
             return;
         }
+        
         // Register a stream handler factory for the JNDI protocol
         URLStreamHandlerFactory streamHandlerFactory =
             new DirContextURLStreamHandlerFactory();
@@ -678,24 +630,24 @@
             throw new LifecycleException("start: ", t);
         }
 
+        setState(LifecycleState.STARTING);
     }
 
 
     /**
-     * Stop this component, finalizing our associated class loader.
+     * Stop associated {@link ClassLoader} and implement the requirements
+     * of {@link LifecycleBase#stopInternal()}.
      *
-     * @exception LifecycleException if a lifecycle error occurs
+     * @exception LifecycleException if this component detects a fatal error
+     *  that prevents this component from being used
      */
-    public void stop() throws LifecycleException {
+    @Override
+    protected void stopInternal() throws LifecycleException {
 
-        // Validate and update our current component state
-        if (!started)
-            throw new LifecycleException
-                (sm.getString("webappLoader.notStarted"));
         if (log.isDebugEnabled())
             log.debug(sm.getString("webappLoader.stopping"));
-        lifecycle.fireLifecycleEvent(STOP_EVENT, null);
-        started = false;
+
+        setState(LifecycleState.STOPPING);
 
         // Remove context attributes as appropriate
         if (container instanceof Context) {
@@ -725,7 +677,6 @@
         classLoader = null;
 
         destroy();
-
     }
 
 



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