Author: markt
Date: Fri Nov  8 12:09:14 2013
New Revision: 1539992

URL: http://svn.apache.org/r1539992
Log:
Improve start time for large web applications by avoiding CNFE from system 
class loader

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1539992&r1=1539991&r2=1539992&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Fri Nov 
 8 12:09:14 2013
@@ -1186,15 +1186,18 @@ public class WebappClassLoader extends U
 
         // (0.2) Try loading the class with the system class loader, to prevent
         //       the webapp from overriding J2SE classes
-        try {
-            clazz = system.loadClass(name);
-            if (clazz != null) {
-                if (resolve)
-                    resolveClass(clazz);
-                return (clazz);
+        String resourceName = binaryNameToPath(name, false);
+        if (system.getResource(resourceName) != null) {
+            try {
+                clazz = system.loadClass(name);
+                if (clazz != null) {
+                    if (resolve)
+                        resolveClass(clazz);
+                    return (clazz);
+                }
+            } catch (ClassNotFoundException e) {
+                // Ignore
             }
-        } catch (ClassNotFoundException e) {
-            // Ignore
         }
 
         // (0.5) Permission to access this class when using a SecurityManager
@@ -2316,7 +2319,7 @@ public class WebappClassLoader extends U
         if (!validate(name))
             throw new ClassNotFoundException(name);
 
-        String path = binaryNameToPath(name);
+        String path = binaryNameToPath(name, true);
 
         ResourceEntry entry = null;
 
@@ -2414,10 +2417,12 @@ public class WebappClassLoader extends U
     }
 
 
-    private String binaryNameToPath(String binaryName) {
+    private String binaryNameToPath(String binaryName, boolean 
withLeadingSlash) {
         StringBuilder path = new StringBuilder(
                 1 + binaryName.length() + CLASS_FILE_SUFFIX.length());
-        path.append('/');
+        if (withLeadingSlash) {
+            path.append('/');
+        }
         path.append(binaryName.replace('.', '/'));
         path.append(CLASS_FILE_SUFFIX);
         return path.toString();
@@ -2613,7 +2618,7 @@ public class WebappClassLoader extends U
      */
     protected Class<?> findLoadedClass0(String name) {
 
-        String path = binaryNameToPath(name);
+        String path = binaryNameToPath(name, true);
 
         ResourceEntry entry = resourceEntries.get(path);
         if (entry != null) {



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to