remm        01/10/20 11:19:25

  Modified:    catalina/src/share/org/apache/catalina/loader
                        WebappClassLoader.java
  Log:
  - Add an optimization to avoid calling the superclass if there are no external
    repositories.
  - getResource and getResourceAsStream weren't calling the superclass
    (which is needed when there are external repositories).
  
  Revision  Changes    Path
  1.22      +32 -11    
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.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- WebappClassLoader.java    2001/10/11 20:59:55     1.21
  +++ WebappClassLoader.java    2001/10/20 18:19:25     1.22
  @@ -1,7 +1,7 @@
   /*
  - * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.21 2001/10/11 20:59:55 remm Exp $
  - * $Revision: 1.21 $
  - * $Date: 2001/10/11 20:59:55 $
  + * $Header: 
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/loader/WebappClassLoader.java,v
 1.22 2001/10/20 18:19:25 remm Exp $
  + * $Revision: 1.22 $
  + * $Date: 2001/10/20 18:19:25 $
    *
    * ====================================================================
    *
  @@ -124,7 +124,7 @@
    *
    * @author Remy Maucherat
    * @author Craig R. McClanahan
  - * @version $Revision: 1.21 $ $Date: 2001/10/11 20:59:55 $
  + * @version $Revision: 1.22 $ $Date: 2001/10/20 18:19:25 $
    */
   public class WebappClassLoader
       extends URLClassLoader
  @@ -341,6 +341,12 @@
       protected boolean started = false;
   
   
  +    /**
  +     * Has external repositories.
  +     */
  +    protected boolean hasExternalRepositories = false;
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  @@ -461,6 +467,7 @@
           try {
               URL url = new URL(repository);
               super.addURL(url);
  +            hasExternalRepositories = true;
           } catch (MalformedURLException e) {
               throw new IllegalArgumentException(e.toString());
           }
  @@ -858,7 +865,7 @@
                       log("      -->RuntimeException Rethrown", e);
                   throw e;
               }
  -            if (clazz == null) {
  +            if ((clazz == null) && hasExternalRepositories) {
                   try {
                       clazz = super.findClass(name);
                   } catch(AccessControlException ace) {
  @@ -918,6 +925,9 @@
               url = entry.source;
           }
   
  +        if ((url == null) && hasExternalRepositories)
  +            url = super.findResource(name);
  +
           if (debug >= 3) {
               if (url != null)
                   log("    --> Returning '" + url.toString() + "'");
  @@ -981,10 +991,14 @@
           }
   
           // Adding the results of a call to the superclass
  -        Enumeration otherResourcePaths = super.findResources(name);
  +        if (hasExternalRepositories) {
  +
  +            Enumeration otherResourcePaths = super.findResources(name);
  +
  +            while (otherResourcePaths.hasMoreElements()) {
  +                result.addElement(otherResourcePaths.nextElement());
  +            }
   
  -        while (otherResourcePaths.hasMoreElements()) {
  -            result.addElement(otherResourcePaths.nextElement());
           }
   
           return result.elements();
  @@ -1114,6 +1128,12 @@
               if (debug >= 2)
                   log("  --> Returning stream from local");
               stream = findLoadedResource(name);
  +            try {
  +                if (hasExternalRepositories && (stream == null))
  +                    stream = url.openStream();
  +            } catch (IOException e) {
  +                ; // Ignore
  +            }
               if (stream != null)
                   return (stream);
           }
  @@ -1438,6 +1458,7 @@
           jarNames = new String[0];
           lastModifiedDates = new long[0];
           paths = new String[0];
  +        hasExternalRepositories = false;
   
           required.clear();
           permissionList.clear();
  @@ -1560,9 +1581,6 @@
           if ((name == null) || (path == null))
               return null;
   
  -        if (notFoundResources.containsKey(name))
  -            return null;
  -
           ResourceEntry entry = (ResourceEntry) resourceEntries.get(name);
           if (entry != null)
               return entry;
  @@ -1627,6 +1645,9 @@
               } catch (NamingException e) {
               }
           }
  +
  +        if ((entry == null) && (notFoundResources.containsKey(name)))
  +            return null;
   
           JarEntry jarEntry = null;
   
  
  
  


Reply via email to