remm        2002/06/08 18:16:11

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappClassLoader.java WebappLoader.java
  Log:
  - Fix bug 5446: allow replacing the class loader.
  - The class specified must extend WebappClassLoader.
  
  Revision  Changes    Path
  1.41      +26 -8     
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java
  
  Index: WebappClassLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- WebappClassLoader.java    8 Jun 2002 23:31:11 -0000       1.40
  +++ WebappClassLoader.java    9 Jun 2002 01:16:11 -0000       1.41
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.40 2002/06/08 23:31:11 remm Exp $
  - * $Revision: 1.40 $
  - * $Date: 2002/06/08 23:31:11 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.41 2002/06/09 01:16:11 remm Exp $
  + * $Revision: 1.41 $
  + * $Date: 2002/06/09 01:16:11 $
    *
    * ====================================================================
    *
  @@ -145,7 +145,7 @@
    *
    * @author Remy Maucherat
    * @author Craig R. McClanahan
  - * @version $Revision: 1.40 $ $Date: 2002/06/08 23:31:11 $
  + * @version $Revision: 1.41 $ $Date: 2002/06/09 01:16:11 $
    */
   public class WebappClassLoader
       extends URLClassLoader
  @@ -205,10 +205,9 @@
        * Construct a new ClassLoader with no defined repositories and no
        * parent ClassLoader.
        */
  -    public WebappClassLoader(DirContext resources) {
  +    public WebappClassLoader() {
   
           super(new URL[0]);
  -        this.resources = resources;
           this.parent = getParent();
           system = getSystemClassLoader();
           securityManager = System.getSecurityManager();
  @@ -224,10 +223,9 @@
        * Construct a new ClassLoader with no defined repositories and no
        * parent ClassLoader.
        */
  -    public WebappClassLoader(ClassLoader parent, DirContext resources) {
  +    public WebappClassLoader(ClassLoader parent) {
   
           super(new URL[0], parent);
  -        this.resources = resources;
           this.parent = getParent();
           system = getSystemClassLoader();
           securityManager = System.getSecurityManager();
  @@ -404,6 +402,26 @@
   
   
       // ------------------------------------------------------------- Properties
  +
  +
  +    /**
  +     * Get associated resources.
  +     */
  +    public DirContext getResources() {
  +
  +        return this.resources;
  +
  +    }
  +
  +
  +    /**
  +     * Set associated resources.
  +     */
  +    public void setResources(DirContext resources) {
  +
  +        this.resources = resources;
  +
  +    }
   
   
       /**
  
  
  
  1.28      +34 -12    
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java
  
  Index: WebappLoader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- WebappLoader.java 15 Mar 2002 20:18:40 -0000      1.27
  +++ WebappLoader.java 9 Jun 2002 01:16:11 -0000       1.28
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
 1.27 2002/03/15 20:18:40 remm Exp $
  - * $Revision: 1.27 $
  - * $Date: 2002/03/15 20:18:40 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappLoader.java,v
 1.28 2002/06/09 01:16:11 remm Exp $
  + * $Revision: 1.28 $
  + * $Date: 2002/06/09 01:16:11 $
    *
    * ====================================================================
    *
  @@ -74,6 +74,7 @@
   import java.io.FileOutputStream;
   import java.io.FilePermission;
   import java.io.OutputStream;
  +import java.lang.reflect.Constructor;
   import java.net.MalformedURLException;
   import java.net.URL;
   import java.net.URLClassLoader;
  @@ -117,7 +118,7 @@
    *
    * @author Craig R. McClanahan
    * @author Remy Maucherat
  - * @version $Revision: 1.27 $ $Date: 2002/03/15 20:18:40 $
  + * @version $Revision: 1.28 $ $Date: 2002/06/09 01:16:11 $
    */
   
   public class WebappLoader
  @@ -203,8 +204,8 @@
   
       /**
        * The Java class name of the ClassLoader implementation to be used.
  -     * To be useful, this ClassLoader should also implement the
  -     * <code>Reloader</code> interface.
  +     * This class should extend WebappClassLoader, otherwise, a different 
  +     * loader implementation must be used.
        */
       private String loaderClass =
           "org.apache.catalina.loader.WebappClassLoader";
  @@ -620,12 +621,8 @@
           // Construct a class loader based on our current repositories list
           try {
   
  -            if (parentClassLoader == null) {
  -                classLoader = new WebappClassLoader(container.getResources());
  -            } else {
  -                classLoader = new WebappClassLoader
  -                    (parentClassLoader, container.getResources());
  -            }
  +            classLoader = createClassLoader();
  +            classLoader.setResources(container.getResources());
               classLoader.setDebug(this.debug);
               classLoader.setDelegate(this.delegate);
   
  @@ -732,6 +729,31 @@
   
   
       // ------------------------------------------------------- Private Methods
  +
  +
  +    /**
  +     * Create associated classLoader.
  +     */
  +    private WebappClassLoader createClassLoader()
  +        throws Exception {
  +
  +        Class clazz = Class.forName(loaderClass);
  +        WebappClassLoader classLoader = null;
  +
  +        if (parentClassLoader == null) {
  +            // Will cause a ClassCast is the class does not extend WCL, but
  +            // this is on purpose (the exception will be caught and rethrown)
  +            classLoader = (WebappClassLoader) clazz.newInstance();
  +        } else {
  +            Class[] argTypes = { ClassLoader.class };
  +            Object[] args = { parentClassLoader };
  +            Constructor constr = clazz.getConstructor(argTypes);
  +            classLoader = (WebappClassLoader) constr.newInstance(args);
  +        }
  +
  +        return classLoader;
  +
  +    }
   
   
       /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to