You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@locus.apache.org on 2000/07/02 00:25:41 UTC

cvs commit: jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader Constants.java StandardLoader.java

craigmcc    00/07/01 15:25:41

  Modified:    proposals/catalina/src/share/org/apache/tomcat/core
                        Constants.java StandardContext.java
               proposals/catalina/src/share/org/apache/tomcat/loader
                        Constants.java StandardLoader.java
  Log:
  Correct the order of initializing the special servlet context attributes
  that Jasper requires for specifying the web application's class loader and
  class path.  This fix restores the ability of Catalina to execute JSP
  pages that use classes in WEB-INF/classes and WEB-INF/lib which had been
  broken by recent changes in the organization of Jasper.
  
  Revision  Changes    Path
  1.5       +3 -21     jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/Constants.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Constants.java	2000/06/24 01:09:00	1.4
  +++ Constants.java	2000/07/01 22:25:37	1.5
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/Constants.java,v 1.4 2000/06/24 01:09:00 craigmcc Exp $
  - * $Revision: 1.4 $
  - * $Date: 2000/06/24 01:09:00 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/Constants.java,v 1.5 2000/07/01 22:25:37 craigmcc Exp $
  + * $Revision: 1.5 $
  + * $Date: 2000/07/01 22:25:37 $
    *
    * ====================================================================
    *
  @@ -71,24 +71,6 @@
       public static final int MAJOR_VERSION = 2;
       public static final int MINOR_VERSION = 2;
       public static final String SERVER_INFO = "Apache Tomcat/X.X";
  -
  -
  -    /**
  -     * The servlet context attribute under which the class loader we use for
  -     * loading servlets is stored (object type is java.lang.ClassLoader).
  -     */
  -    public static final String CLASSLOADER_ATTR =
  -	"org.apache.tomcat.classloader";
  -
  -
  -    /**
  -     * The servlet context attribute under which the class path for our class
  -     * loader is stored (object type is java.lang.String).  The class path
  -     * consists of a list of directories and JAR/ZIP files, delimited by the
  -     * appropriate path delimiter for this platform.
  -     */
  -    public static final String CLASSPATH_ATTR =
  -	"org.apache.tomcat.jsp_classpath";
   
   
       /**
  
  
  
  1.22      +5 -55     jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java
  
  Index: StandardContext.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- StandardContext.java	2000/06/23 22:24:03	1.21
  +++ StandardContext.java	2000/07/01 22:25:39	1.22
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v 1.21 2000/06/23 22:24:03 craigmcc Exp $
  - * $Revision: 1.21 $
  - * $Date: 2000/06/23 22:24:03 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/core/StandardContext.java,v 1.22 2000/07/01 22:25:39 craigmcc Exp $
  + * $Revision: 1.22 $
  + * $Date: 2000/07/01 22:25:39 $
    *
    * ====================================================================
    *
  @@ -97,7 +97,7 @@
    * requests directed to a particular servlet.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.21 $ $Date: 2000/06/23 22:24:03 $
  + * @version $Revision: 1.22 $ $Date: 2000/07/01 22:25:39 $
    */
   
   public final class StandardContext
  @@ -1480,10 +1480,6 @@
       public synchronized void setLoader(Loader loader) {
   
   	super.setLoader(loader);
  -	if (started && (loader != null)) {
  -	    setClassLoader();
  -	    setClassPath();
  -	}
   
       }
   
  @@ -1495,12 +1491,8 @@
        */
       public void start() throws LifecycleException {
   
  +	setWorkDirectory();
   	super.start();
  -	if (loader != null) {
  -	    setClassLoader();
  -	    setClassPath();
  -	    setWorkDirectory();
  -	}
   
       }
   
  @@ -1557,48 +1549,6 @@
       private void setPaused(boolean paused) {
   
   	this.paused = paused;
  -
  -    }
  -
  -
  -    /**
  -     * Set the appropriate context attribute for our class loader.
  -     */
  -    private void setClassLoader() {
  -
  -	ServletContext servletContext = getServletContext();
  -	if (servletContext == null)
  -	    return;
  -	Loader loader = getLoader();
  -	if (loader == null)
  -	    return;
  -	servletContext.setAttribute(Constants.CLASSLOADER_ATTR,
  -				    loader.getClassLoader());
  -
  -    }
  -
  -
  -    /**
  -     * Set the appropriate context attribute for our class path.
  -     */
  -    private void setClassPath() {
  -
  -	ServletContext servletContext = getServletContext();
  -	if (servletContext == null)
  -	    return;
  -	Loader loader = getLoader();
  -	if (loader == null)
  -	    return;
  -
  -	StringBuffer classpath = new StringBuffer();
  -	String repositories[] = loader.findRepositories();
  -	for (int i = 0; i < repositories.length; i++) {
  -	    if (i > 0)
  -		classpath.append(File.pathSeparator);
  -	    classpath.append(repositories[i]);
  -	}
  -	servletContext.setAttribute(Constants.CLASSPATH_ATTR,
  -				    classpath.toString());
   
       }
   
  
  
  
  1.2       +21 -3     jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/Constants.java
  
  Index: Constants.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/Constants.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Constants.java	2000/04/26 02:14:53	1.1
  +++ Constants.java	2000/07/01 22:25:40	1.2
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/Constants.java,v 1.1 2000/04/26 02:14:53 craigmcc Exp $
  - * $Revision: 1.1 $
  - * $Date: 2000/04/26 02:14:53 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/Constants.java,v 1.2 2000/07/01 22:25:40 craigmcc Exp $
  + * $Revision: 1.2 $
  + * $Date: 2000/07/01 22:25:40 $
    *
    * ====================================================================
    *
  @@ -68,6 +68,24 @@
   public class Constants {
   
       public static final String Package = "org.apache.tomcat.loader";
  +
  +    /**
  +     * The servlet context attribute under which the class loader we use for
  +     * loading servlets is stored (object type is java.lang.ClassLoader).
  +     */
  +    public static final String CLASSLOADER_ATTR =
  +	"org.apache.tomcat.classloader";
  +
  +
  +    /**
  +     * The servlet context attribute under which the class path for our class
  +     * loader is stored (object type is java.lang.String).  The class path
  +     * consists of a list of directories and JAR/ZIP files, delimited by the
  +     * appropriate path delimiter for this platform.
  +     */
  +    public static final String CLASSPATH_ATTR =
  +	"org.apache.tomcat.jsp_classpath";
  +
   
   }
   
  
  
  
  1.7       +67 -6     jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/StandardLoader.java
  
  Index: StandardLoader.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/StandardLoader.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StandardLoader.java	2000/06/22 06:15:44	1.6
  +++ StandardLoader.java	2000/07/01 22:25:40	1.7
  @@ -1,7 +1,7 @@
   /*
  - * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/StandardLoader.java,v 1.6 2000/06/22 06:15:44 craigmcc Exp $
  - * $Revision: 1.6 $
  - * $Date: 2000/06/22 06:15:44 $
  + * $Header: /home/cvs/jakarta-tomcat/proposals/catalina/src/share/org/apache/tomcat/loader/StandardLoader.java,v 1.7 2000/07/01 22:25:40 craigmcc Exp $
  + * $Revision: 1.7 $
  + * $Date: 2000/07/01 22:25:40 $
    *
    * ====================================================================
    *
  @@ -72,6 +72,7 @@
   import java.io.IOException;
   import java.util.Enumeration;
   import java.util.Vector;
  +import javax.servlet.ServletContext;
   import org.apache.tomcat.Container;
   import org.apache.tomcat.Context;
   import org.apache.tomcat.Lifecycle;
  @@ -97,7 +98,7 @@
    * is not present, the system class loader will be used instead.
    *
    * @author Craig R. McClanahan
  - * @version $Revision: 1.6 $ $Date: 2000/06/22 06:15:44 $
  + * @version $Revision: 1.7 $ $Date: 2000/07/01 22:25:40 $
    */
   
   public final class StandardLoader
  @@ -396,8 +397,10 @@
           if (debug >= 1)
   	    log(sm.getString("standardLoader.addRepository", repository));
   	repositories.addElement(repository);
  -	if (started)
  +	if (started) {
   	    classLoader.addRepository(repository);
  +	    setClassPath();
  +	}
   
       }
   
  @@ -451,8 +454,10 @@
           if (debug >= 1)
   	    log(sm.getString("standardLoader.removeRepository", repository));
   	repositories.removeElement(repository);
  -	if (started)
  +	if (started) {
   	    classLoader.removeRepository(repository);
  +	    setClassPath();
  +	}
   
       }
   
  @@ -527,6 +532,10 @@
   	    throw new LifecycleException("start: ", t);
   	}
   
  +	// Set up context attributes if appropriate
  +	setClassLoader();
  +	setClassPath();
  +
   	// Start our background thread if we are reloadable
   	if (reloadable) {
   	    log(sm.getString("standardLoader.reloading"));
  @@ -561,6 +570,14 @@
   	if (reloadable)
   	    threadStop();
   
  +	// Remove context attributes as appropriate
  +	if (container instanceof Context) {
  +	    ServletContext servletContext =
  +		((Context) container).getServletContext();
  +	    servletContext.removeAttribute(Constants.CLASSLOADER_ATTR);
  +	    servletContext.removeAttribute(Constants.CLASSPATH_ATTR);
  +	}
  +
   	// Throw away our current class loader
   	if (classLoader instanceof Lifecycle)
   	    ((Lifecycle) classLoader).stop();
  @@ -659,6 +676,50 @@
   
   	ContextNotifier notifier = new ContextNotifier((Context) container);
   	(new Thread(notifier)).start();
  +
  +    }
  +
  +
  +    /**
  +     * Set the appropriate context attribute for our class loader.  This
  +     * is required only because Jasper depends on it.
  +     */
  +    private void setClassLoader() {
  +
  +	if (!(container instanceof Context))
  +	    return;
  +	ServletContext servletContext =
  +	    ((Context) container).getServletContext();
  +	if (servletContext == null)
  +	    return;
  +	servletContext.setAttribute(Constants.CLASSLOADER_ATTR,
  +				    getClassLoader());
  +
  +    }
  +
  +
  +    /**
  +     * Set the appropriate context attribute for our class path.  This
  +     * is required only because Jasper depends on it.
  +     */
  +    private void setClassPath() {
  +
  +	if (!(container instanceof Context))
  +	    return;
  +	ServletContext servletContext =
  +	    ((Context) container).getServletContext();
  +	if (servletContext == null)
  +	    return;
  +
  +	StringBuffer classpath = new StringBuffer();
  +	String repositories[] = findRepositories();
  +	for (int i = 0; i < repositories.length; i++) {
  +	    if (i > 0)
  +		classpath.append(File.pathSeparator);
  +	    classpath.append(repositories[i]);
  +	}
  +	servletContext.setAttribute(Constants.CLASSPATH_ATTR,
  +				    classpath.toString());
   
       }