You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/04/16 16:11:13 UTC
svn commit: r1587911 - in /tomcat/trunk:
java/org/apache/catalina/core/StandardHost.java
java/org/apache/catalina/loader/WebappClassLoader.java
java/org/apache/catalina/loader/WebappLoader.java webapps/docs/changelog.xml
Author: markt
Date: Wed Apr 16 14:11:13 2014
New Revision: 1587911
URL: http://svn.apache.org/r1587911
Log:
Improve implementation of Lifecycle for WebappClassLoader. State is now correctly reported rather than always reporting as NEW.
Modified:
tomcat/trunk/java/org/apache/catalina/core/StandardHost.java
tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/catalina/core/StandardHost.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/StandardHost.java?rev=1587911&r1=1587910&r2=1587911&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/StandardHost.java (original)
+++ tomcat/trunk/java/org/apache/catalina/core/StandardHost.java Wed Apr 16 14:11:13 2014
@@ -733,7 +733,7 @@ public class StandardHost extends Contai
childClassLoaders.entrySet()) {
ClassLoader cl = entry.getKey();
if (cl instanceof WebappClassLoader) {
- if (!((WebappClassLoader) cl).isStarted()) {
+ if (!((WebappClassLoader) cl).getState().isAvailable()) {
result.add(entry.getValue());
}
}
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=1587911&r1=1587910&r2=1587911&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Wed Apr 16 14:11:13 2014
@@ -345,12 +345,6 @@ public class WebappClassLoader extends U
/**
- * Has this component been started?
- */
- protected boolean started = false;
-
-
- /**
* need conversion for properties files
*/
protected boolean needConvert = false;
@@ -426,6 +420,9 @@ public class WebappClassLoader extends U
*/
private boolean hasExternalRepositories = false;
+ private volatile LifecycleState state = LifecycleState.NEW;
+
+
// ------------------------------------------------------------- Properties
/**
@@ -714,7 +711,7 @@ public class WebappClassLoader extends U
result.resources = this.resources;
result.delegate = this.delegate;
- result.started = this.started;
+ result.state = this.state;
result.needConvert = this.needConvert;
result.clearReferencesStatic = this.clearReferencesStatic;
result.clearReferencesStopThreads = this.clearReferencesStopThreads;
@@ -848,7 +845,7 @@ public class WebappClassLoader extends U
log.debug(" findClass(" + name + ")");
// Cannot load anything from local repositories if class loader is stopped
- if (!started) {
+ if (!state.isAvailable()) {
throw new ClassNotFoundException(name);
}
@@ -1211,7 +1208,7 @@ public class WebappClassLoader extends U
Class<?> clazz = null;
// Log access to stopped classloader
- if (!started) {
+ if (!state.isAvailable()) {
try {
throw new IllegalStateException();
} catch (IllegalStateException e) {
@@ -1419,7 +1416,7 @@ public class WebappClassLoader extends U
*/
@Override
public LifecycleState getState() {
- return LifecycleState.NEW;
+ return state;
}
@@ -1434,7 +1431,7 @@ public class WebappClassLoader extends U
@Override
public void init() {
- // NOOP
+ state = LifecycleState.INITIALIZED;
}
@@ -1446,6 +1443,8 @@ public class WebappClassLoader extends U
@Override
public void start() throws LifecycleException {
+ state = LifecycleState.STARTING_PREP;
+
WebResource classes = resources.getResource("/WEB-INF/classes");
if (classes.isDirectory() && classes.canRead()) {
addURL(classes.getURL());
@@ -1459,7 +1458,8 @@ public class WebappClassLoader extends U
}
}
- started = true;
+ state = LifecycleState.STARTING;
+
String encoding = null;
try {
encoding = System.getProperty("file.encoding");
@@ -1470,13 +1470,10 @@ public class WebappClassLoader extends U
needConvert = true;
}
+ state = LifecycleState.STARTED;
}
- public boolean isStarted() {
- return started;
- }
-
/**
* Stop the class loader.
*
@@ -1485,11 +1482,13 @@ public class WebappClassLoader extends U
@Override
public void stop() throws LifecycleException {
+ state = LifecycleState.STOPPING_PREP;
+
// Clearing references should be done before setting started to
// false, due to possible side effects
clearReferences();
- started = false;
+ state = LifecycleState.STOPPING;
resourceEntries.clear();
jarModificationTimes.clear();
@@ -1497,12 +1496,14 @@ public class WebappClassLoader extends U
permissionList.clear();
loaderPC.clear();
+
+ state = LifecycleState.STOPPED;
}
@Override
public void destroy() {
- // NOOP
+ state = LifecycleState.DESTROYED;
}
@@ -2512,7 +2513,7 @@ public class WebappClassLoader extends U
*/
protected ResourceEntry findResourceInternal(final String name, final String path) {
- if (!started) {
+ if (!state.isAvailable()) {
log.info(sm.getString("webappClassLoader.stopped", name));
return null;
}
Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1587911&r1=1587910&r2=1587911&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Wed Apr 16 14:11:13 2014
@@ -444,7 +444,8 @@ public class WebappLoader extends Lifecy
// Throw away our current class loader
if (classLoader != null) {
- ((Lifecycle) classLoader).stop();
+ classLoader.stop();
+ classLoader.destroy();
}
try {
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1587911&r1=1587910&r2=1587911&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Apr 16 14:11:13 2014
@@ -97,6 +97,11 @@
reverts all the operations performed when adding an MBean notification
listener. (markt)
</fix>
+ <scode>
+ Improve implementation of <code>Lifecycle</code> for
+ <code>WebappClassLoader</code>. State is now correctly reported rather
+ than always reporting as <code>NEW</code>. (markt)
+ </scode>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org