Author: markt
Date: Mon May 19 19:38:13 2014
New Revision: 1596004
URL: http://svn.apache.org/r1596004
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56387
Refactor handling of class loading attempts after web application stop.
Modified:
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
tomcat/trunk/webapps/docs/changelog.xml
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=1596004&r1=1596003&r2=1596004&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Mon May
19 19:38:13 2014
@@ -852,10 +852,7 @@ public class WebappClassLoader extends U
if (log.isDebugEnabled())
log.debug(" findClass(" + name + ")");
- // Cannot load anything from local repositories if class loader is
stopped
- if (!state.isAvailable()) {
- throw new ClassNotFoundException(name);
- }
+ checkStateForClassLoading(name);
// (1) Permission to define this class when using a SecurityManager
if (securityManager != null) {
@@ -1215,14 +1212,8 @@ public class WebappClassLoader extends U
log.debug("loadClass(" + name + ", " + resolve + ")");
Class<?> clazz = null;
- // Log access to stopped classloader
- if (!state.isAvailable()) {
- try {
- throw new IllegalStateException();
- } catch (IllegalStateException e) {
- log.info(sm.getString("webappClassLoader.stopped", name), e);
- }
- }
+ // Log access to stopped class loader
+ checkStateForClassLoading(name);
// (0) Check our previously loaded local class cache
clazz = findLoadedClass0(name);
@@ -1331,7 +1322,19 @@ public class WebappClassLoader extends U
}
throw new ClassNotFoundException(name);
+ }
+
+ protected void checkStateForClassLoading(String className) {
+ // It is not permitted to load new classes once the web application has
+ // been stopped.
+ if (!state.isAvailable()) {
+ String msg = sm.getString("webappClassLoader.stopped", className);
+ IllegalStateException cause = new IllegalStateException(msg);
+ ClassNotFoundException cnfe = new ClassNotFoundException();
+ cnfe.initCause(cause);
+ log.info(msg, cnfe);
+ }
}
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1596004&r1=1596003&r2=1596004&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Mon May 19 19:38:13 2014
@@ -47,6 +47,12 @@
<section name="Tomcat 8.0.9 (markt)">
<subsection name="Catalina">
<changelog>
+ <scode>
+ <bug>56387</bug>: Improve the code that handles an attempt to load a
+ class after a web application has been stopped. Use common code to
handle
+ this case regardless of the access path and don't throw an exception
+ purely to log a stack trace. (markt)
+ </scode>
<scode>
<bug>56399</bug>: Improve implementation of
CoyoteAdapter.checkRecycled()
to do not use an exception for flow control. (kkolinko)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]