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