bloritsch 01/01/30 09:25:46
Modified: src/org/apache/cocoon/components/classloader Tag:
xml-cocoon2 ClassLoaderManagerImpl.java
RepositoryClassLoader.java
src/org/apache/cocoon/servlet Tag: xml-cocoon2
CocoonServlet.java
src/org/apache/cocoon/util Tag: xml-cocoon2 ClassUtils.java
Log:
Modified the ClassLoader to load the Cocoon object, added a Servlet parameter
to
identify the Cocoon.jar file, fixed a minor bug in the ClassPath
assembler(adding ";null").
Revision Changes Path
No revision
No revision
1.1.2.6 +10 -3
xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/ClassLoaderManagerImpl.java
Index: ClassLoaderManagerImpl.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/ClassLoaderManagerImpl.java,v
retrieving revision 1.1.2.5
retrieving revision 1.1.2.6
diff -u -r1.1.2.5 -r1.1.2.6
--- ClassLoaderManagerImpl.java 2000/12/07 17:10:35 1.1.2.5
+++ ClassLoaderManagerImpl.java 2001/01/30 17:25:18 1.1.2.6
@@ -9,6 +9,9 @@
import java.io.IOException;
import java.io.File;
+import java.net.URL;
+import java.net.MalformedURLException;
+import org.apache.cocoon.util.ClassUtils;
import org.apache.avalon.ThreadSafe;
@@ -16,7 +19,7 @@
* A singleton-like implementation of <code>ClassLoaderManager</code>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
- * @version CVS $Revision: 1.1.2.5 $ $Date: 2000/12/07 17:10:35 $
+ * @version CVS $Revision: 1.1.2.6 $ $Date: 2001/01/30 17:25:18 $
*/
public class ClassLoaderManagerImpl implements ClassLoaderManager,
ThreadSafe {
/**
@@ -30,7 +33,7 @@
*/
public ClassLoaderManagerImpl() {
if (instance == null) {
- instance = new RepositoryClassLoader();
+ this.reinstantiate();
}
}
@@ -60,6 +63,10 @@
*
*/
public synchronized void reinstantiate() {
- instance = new RepositoryClassLoader();
+ try {
+ instance = new RepositoryClassLoader(new URL[]
{ClassUtils.getCocoonURL()}, ClassUtils.getClassLoader());
+ } catch (MalformedURLException mue) {
+ instance = new RepositoryClassLoader();
+ }
}
}
1.1.2.18 +15 -1
xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java
Index: RepositoryClassLoader.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/components/classloader/Attic/RepositoryClassLoader.java,v
retrieving revision 1.1.2.17
retrieving revision 1.1.2.18
diff -u -r1.1.2.17 -r1.1.2.18
--- RepositoryClassLoader.java 2001/01/22 21:56:33 1.1.2.17
+++ RepositoryClassLoader.java 2001/01/30 17:25:21 1.1.2.18
@@ -33,7 +33,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.2.17 $ $Date: 2001/01/22 21:56:33 $
+ * @version CVS $Revision: 1.1.2.18 $ $Date: 2001/01/30 17:25:21 $
*/
class RepositoryClassLoader extends URLClassLoader implements Loggable {
/**
@@ -46,6 +46,20 @@
*/
public RepositoryClassLoader() {
super(new URL[] {}, ClassUtils.getClassLoader());
+ }
+
+ /**
+ * Create an empty new class loader.
+ */
+ public RepositoryClassLoader(URL[] urls) {
+ super(urls, ClassUtils.getClassLoader());
+ }
+
+ /**
+ * Create an empty new class loader.
+ */
+ public RepositoryClassLoader(URL[] urls, ClassLoader parentClassLoader) {
+ super(urls, parentClassLoader);
}
public void setLogger(Logger logger) {
No revision
No revision
1.1.4.46 +28 -8
xml-cocoon/src/org/apache/cocoon/servlet/Attic/CocoonServlet.java
Index: CocoonServlet.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/servlet/Attic/CocoonServlet.java,v
retrieving revision 1.1.4.45
retrieving revision 1.1.4.46
diff -u -r1.1.4.45 -r1.1.4.46
--- CocoonServlet.java 2001/01/23 16:44:51 1.1.4.45
+++ CocoonServlet.java 2001/01/30 17:25:35 1.1.4.46
@@ -53,7 +53,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a> Aisa
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.1.4.45 $ $Date: 2001/01/23 16:44:51 $
+ * @version CVS $Revision: 1.1.4.46 $ $Date: 2001/01/30 17:25:35 $
*/
public class CocoonServlet extends HttpServlet {
@@ -106,6 +106,8 @@
ClassUtils.setClassLoader(this.getClass().getClassLoader());
+ this.setupCocoonJar(conf.getInitParameter("cocoon-jar"),
this.context);
+
this.createCocoon();
}
@@ -162,27 +164,45 @@
StringTokenizer classpathTokenizer = new
StringTokenizer(classpathAttribute, " \t\r\n\f;,", false);
while (classpathTokenizer.hasMoreTokens()) {
- final String localClasspath =
classpathTokenizer.nextToken().trim();
+ final String attributeName =
classpathTokenizer.nextToken().trim();
+ final String localClasspath = (String)
context.getAttribute(attributeName);
if (localClasspath != null) {
if (buildClassPath.length() > 0) {
buildClassPath.append(";");
}
- log.debug("Using attribute: " + localClasspath.trim());
- buildClassPath.append((String)
context.getAttribute(localClasspath.trim()));
+ log.debug("Using attribute: " + attributeName);
+ buildClassPath.append(localClasspath.trim());
+ } else {
+ log.debug("Attribute was empty: " + attributeName);
}
}
}
- if (buildClassPath.length() == 0) {
- buildClassPath.append(System.getProperty("java.class.path"));
+ if (buildClassPath.length() > 0) {
+ buildClassPath.append(";");
}
+ buildClassPath.append(System.getProperty("java.class.path"));
+
this.classpath = buildClassPath.toString();
}
/**
+ * Set up the Cocoon Jar path. That way it can be loaded by the Cocoon
+ * classloader instead of the servlet classloader. This is to protect
+ * Cocoon from broken classloaders.
+ */
+ private void setupCocoonJar(String cocoonJar, ServletContext context) {
+ try {
+ ClassUtils.setCocoonURL(context.getResource(cocoonJar));
+ } catch (MalformedURLException mue) {
+ log.debug("Could not set the Cocoon URL for the jar file.", mue);
+ }
+ }
+
+ /**
* Set up the log level and path. The default log level is
* Priority.ERROR, although it can be overwritten by the parameter
* "log-level". The log system goes to both a file and the Servlet
@@ -340,7 +360,7 @@
}
HttpEnvironment env = new HttpEnvironment(uri, req, res,
this.context);
- env.setLogger(this.log);
+ env.setLogger(this.log);
if (!this.cocoon.process(env)) {
@@ -376,7 +396,7 @@
long end = new Date().getTime();
String timeString = processTime(end - start);
- log.debug("'" + uri + "' " + timeString);
+ log.info("'" + uri + "' " + timeString);
String showTime = req.getParameter(Cocoon.SHOWTIME_PARAM);
No revision
No revision
1.1.2.10 +34 -2
xml-cocoon/src/org/apache/cocoon/util/Attic/ClassUtils.java
Index: ClassUtils.java
===================================================================
RCS file:
/home/cvs/xml-cocoon/src/org/apache/cocoon/util/Attic/ClassUtils.java,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -r1.1.2.9 -r1.1.2.10
--- ClassUtils.java 2001/01/18 16:17:02 1.1.2.9
+++ ClassUtils.java 2001/01/30 17:25:41 1.1.2.10
@@ -21,7 +21,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ricardo Rocha</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Revision: 1.1.2.9 $ $Date: 2001/01/18 16:17:02 $
+ * @version CVS $Revision: 1.1.2.10 $ $Date: 2001/01/30 17:25:41 $
*/
public class ClassUtils {
@@ -31,6 +31,10 @@
private static ClassLoader loader = null;
/**
+ * Reference for global Cocoon Jar URL that Cocoon uses throughout.
+ */
+ private static URL cocoonURL = null;
+ /**
* Create a new instance given a class name
*
* @param className A class name
@@ -80,7 +84,7 @@
setClassLoader(ClassUtils.class.getClassLoader());
}
- return loader;
+ return ClassUtils.loader;
}
/**
@@ -92,6 +96,34 @@
public static void setClassLoader(ClassLoader loader) {
if (ClassUtils.loader == null) {
ClassUtils.loader = loader;
+ }
+ }
+
+ /**
+ * Return the context classloader.
+ * BL: if this is command line operation, the classloading issues
+ * are more sane. During servlet execution, we explicitly set
+ * the ClassLoader.
+ *
+ * @return The context classloader.
+ */
+ public static URL getCocoonURL() throws MalformedURLException {
+ if (ClassUtils.cocoonURL == null) {
+ throw new MalformedURLException("The cocoon jar URL was never
set.");
+ }
+
+ return ClassUtils.cocoonURL;
+ }
+
+ /**
+ * Set the context CocoonURL
+ * BL: if this is command line operation, the classloading issues
+ * are more sane. During servlet execution, we explicitly set
+ * the CocoonURL.
+ */
+ public static void setCocoonURL(URL location) {
+ if (ClassUtils.cocoonURL == null) {
+ ClassUtils.cocoonURL = location;
}
}