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: [email protected]
For additional commands, e-mail: [email protected]