1
Index: trunk/java/org/apache/jasper/servlet/JasperLoader.java
2
===================================================================
3
--- trunk/java/org/apache/jasper/servlet/JasperLoader.java (revision 941867)
4
+++ trunk/java/org/apache/jasper/servlet/JasperLoader.java (revision 941868)
7
* @exception ClassNotFoundException if the class was not found
9
- public Class loadClass(final String name, boolean resolve)
10
+ public synchronized Class loadClass(final String name, boolean resolve)
11
throws ClassNotFoundException {
15
public final PermissionCollection getPermissions(CodeSource codeSource) {
16
return permissionCollection;
19
\ No newline at end of file
21
Index: trunk/java/org/apache/catalina/loader/ResourceEntry.java
22
===================================================================
23
--- trunk/java/org/apache/catalina/loader/ResourceEntry.java (revision 941867)
24
+++ trunk/java/org/apache/catalina/loader/ResourceEntry.java (revision 941868)
29
- public Class loadedClass = null;
30
+ public volatile Class loadedClass = null;
34
Index: trunk/java/org/apache/catalina/loader/WebappClassLoader.java
35
===================================================================
36
--- trunk/java/org/apache/catalina/loader/WebappClassLoader.java (revision 941867)
37
+++ trunk/java/org/apache/catalina/loader/WebappClassLoader.java (revision 941868)
38
@@ -1432,102 +1432,121 @@
40
* @exception ClassNotFoundException if the class was not found
42
- public Class loadClass(String name, boolean resolve)
43
+ public synchronized Class loadClass(String name, boolean resolve)
44
throws ClassNotFoundException {
46
- synchronized (name.intern()) {
47
- if (log.isDebugEnabled())
48
- log.debug("loadClass(" + name + ", " + resolve + ")");
51
- // Log access to stopped classloader
54
- throw new IllegalStateException();
55
- } catch (IllegalStateException e) {
56
- log.info(sm.getString("webappClassLoader.stopped", name), e);
58
+ if (log.isDebugEnabled())
59
+ log.debug("loadClass(" + name + ", " + resolve + ")");
62
+ // Log access to stopped classloader
65
+ throw new IllegalStateException();
66
+ } catch (IllegalStateException e) {
67
+ log.info(sm.getString("webappClassLoader.stopped", name), e);
70
- // (0) Check our previously loaded local class cache
71
- clazz = findLoadedClass0(name);
74
+ // (0) Check our previously loaded local class cache
75
+ clazz = findLoadedClass0(name);
76
+ if (clazz != null) {
77
+ if (log.isDebugEnabled())
78
+ log.debug(" Returning class from cache");
80
+ resolveClass(clazz);
84
+ // (0.1) Check our previously loaded class cache
85
+ clazz = findLoadedClass(name);
86
+ if (clazz != null) {
87
+ if (log.isDebugEnabled())
88
+ log.debug(" Returning class from cache");
90
+ resolveClass(clazz);
94
+ // (0.2) Try loading the class with the system class loader, to prevent
95
+ // the webapp from overriding J2SE classes
97
+ clazz = system.loadClass(name);
99
- if (log.isDebugEnabled())
100
- log.debug(" Returning class from cache");
106
- // (0.1) Check our previously loaded class cache
107
- clazz = findLoadedClass(name);
108
- if (clazz != null) {
109
- if (log.isDebugEnabled())
110
- log.debug(" Returning class from cache");
112
- resolveClass(clazz);
114
+ } catch (ClassNotFoundException e) {
118
+ // (0.5) Permission to access this class when using a SecurityManager
119
+ if (securityManager != null) {
120
+ int i = name.lastIndexOf('.');
123
+ securityManager.checkPackageAccess(name.substring(0,i));
124
+ } catch (SecurityException se) {
125
+ String error = "Security Violation, attempt to use " +
126
+ "Restricted Class: " + name;
127
+ log.info(error, se);
128
+ throw new ClassNotFoundException(error, se);
132
- // (0.2) Try loading the class with the system class loader, to prevent
133
- // the webapp from overriding J2SE classes
136
+ boolean delegateLoad = delegate || filter(name);
138
+ // (1) Delegate to our parent if requested
139
+ if (delegateLoad) {
140
+ if (log.isDebugEnabled())
141
+ log.debug(" Delegating to parent classloader1 " + parent);
142
+ ClassLoader loader = parent;
143
+ if (loader == null)
146
- clazz = system.loadClass(name);
147
+ clazz = loader.loadClass(name);
149
+ if (log.isDebugEnabled())
150
+ log.debug(" Loading class from parent");
155
} catch (ClassNotFoundException e) {
160
- // (0.5) Permission to access this class when using a SecurityManager
161
- if (securityManager != null) {
162
- int i = name.lastIndexOf('.');
165
- securityManager.checkPackageAccess(name.substring(0,i));
166
- } catch (SecurityException se) {
167
- String error = "Security Violation, attempt to use " +
168
- "Restricted Class: " + name;
169
- log.info(error, se);
170
- throw new ClassNotFoundException(error, se);
175
- boolean delegateLoad = delegate || filter(name);
177
- // (1) Delegate to our parent if requested
178
- if (delegateLoad) {
181
+ // (2) Search local repositories
182
+ if (log.isDebugEnabled())
183
+ log.debug(" Searching local repositories");
185
+ clazz = findClass(name);
186
+ if (clazz != null) {
187
if (log.isDebugEnabled())
188
- log.debug(" Delegating to parent classloader1 " + parent);
189
- ClassLoader loader = parent;
190
- if (loader == null)
193
- clazz = loader.loadClass(name);
194
- if (clazz != null) {
195
- if (log.isDebugEnabled())
196
- log.debug(" Loading class from parent");
198
- resolveClass(clazz);
201
- } catch (ClassNotFoundException e) {
204
+ log.debug(" Loading class from local repository");
206
+ resolveClass(clazz);
210
- // (2) Search local repositories
211
+ } catch (ClassNotFoundException e) {
215
+ // (3) Delegate to parent unconditionally
216
+ if (!delegateLoad) {
217
if (log.isDebugEnabled())
218
- log.debug(" Searching local repositories");
219
+ log.debug(" Delegating to parent classloader at end: " + parent);
220
+ ClassLoader loader = parent;
221
+ if (loader == null)
224
- clazz = findClass(name);
225
+ clazz = loader.loadClass(name);
227
if (log.isDebugEnabled())
228
- log.debug(" Loading class from local repository");
229
+ log.debug(" Loading class from parent");
233
@@ -1535,30 +1554,10 @@
234
} catch (ClassNotFoundException e) {
238
- // (3) Delegate to parent unconditionally
239
- if (!delegateLoad) {
240
- if (log.isDebugEnabled())
241
- log.debug(" Delegating to parent classloader at end: " + parent);
242
- ClassLoader loader = parent;
243
- if (loader == null)
246
- clazz = loader.loadClass(name);
247
- if (clazz != null) {
248
- if (log.isDebugEnabled())
249
- log.debug(" Loading class from parent");
251
- resolveClass(clazz);
254
- } catch (ClassNotFoundException e) {
259
- throw new ClassNotFoundException(name);
262
+ throw new ClassNotFoundException(name);
267
@@ -2544,7 +2543,7 @@
271
- synchronized (name.intern()) {
272
+ synchronized (this) {
273
clazz = entry.loadedClass;