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;
           }
       }
   
  
  
  

Reply via email to