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