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]>