You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2015/04/20 15:54:11 UTC
tomee git commit: internalDestroy on th emodel of internalStop to
support reloading as well
Repository: tomee
Updated Branches:
refs/heads/master 1665a38f5 -> c31f000e4
internalDestroy on th emodel of internalStop to support reloading as well
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/c31f000e
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/c31f000e
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/c31f000e
Branch: refs/heads/master
Commit: c31f000e433096410e575bd0661cd339406d720f
Parents: 1665a38
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Mon Apr 20 15:53:56 2015 +0200
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Mon Apr 20 15:53:56 2015 +0200
----------------------------------------------------------------------
.../tomee/catalina/LazyStopStandardRoot.java | 9 ++++++-
.../tomee/catalina/TomEEWebappClassLoader.java | 17 +++++++-----
.../tomee/catalina/TomEEWebappLoader.java | 16 ++++++++++++
.../tomee/catalina/TomcatWebAppBuilder.java | 27 +++++++++++++++++++-
4 files changed, 61 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tomee/blob/c31f000e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopStandardRoot.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopStandardRoot.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopStandardRoot.java
index 80a49af..040fed2 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopStandardRoot.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopStandardRoot.java
@@ -320,8 +320,15 @@ public class LazyStopStandardRoot implements WebResourceRoot, JmxEnabled {
// delegate.destroy();
}
+ public void internalDestroy() throws LifecycleException {
+ delegate.destroy();
+ }
+
public void internalStop() throws LifecycleException {
delegate.stop();
- delegate.destroy();
+ }
+
+ public WebResourceRoot getDelegate() {
+ return delegate;
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/c31f000e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
index e2364e6..0c94a64 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappClassLoader.java
@@ -253,6 +253,14 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
return URLClassLoaderFirst.shouldSkip(name);
}
+ public void internalDestroy() {
+ try {
+ super.destroy();
+ } finally {
+ cleanUpClassLoader();
+ }
+ }
+
public void internalStop() throws LifecycleException {
if (stopped) {
return;
@@ -264,9 +272,10 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
thread.setContextClassLoader(this);
try {
super.stop();
- super.destroy();
+ // super.destroy();
if (webResourceRoot != null) {
webResourceRoot.internalStop();
+ webResourceRoot = null;
}
stopped = true;
} finally {
@@ -445,11 +454,7 @@ public class TomEEWebappClassLoader extends ParallelWebappClassLoader {
@Override
public void destroy() {
if (forceStopPhase) {
- try {
- super.destroy();
- } finally {
- cleanUpClassLoader();
- }
+ internalDestroy();
}
}
http://git-wip-us.apache.org/repos/asf/tomee/blob/c31f000e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
index 9ca2061..eee2d2a 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEWebappLoader.java
@@ -43,6 +43,8 @@ import java.io.File;
public class TomEEWebappLoader extends WebappLoader {
public static final boolean SKIP_BACKGROUND_PROCESS = "true".equals(SystemInstance.get().getProperty("tomee.classloader.skip-background-process", "false"));
+ private volatile ClassLoader loader;
+
@Override
public void backgroundProcess() {
if (SKIP_BACKGROUND_PROCESS) {
@@ -69,6 +71,20 @@ public class TomEEWebappLoader extends WebappLoader {
}
@Override
+ protected void stopInternal() throws LifecycleException {
+ loader = getClassLoader();
+ super.stopInternal();
+ }
+
+ public void clearLoader() {
+ loader = null;
+ }
+
+ public ClassLoader internalLoader() {
+ return loader;
+ }
+
+ @Override
protected void startInternal() throws LifecycleException {
if (getClassLoader() != null) {
final TomEEWebappClassLoader webappClassLoader = TomEEWebappClassLoader.class.cast(getClassLoader());
http://git-wip-us.apache.org/repos/asf/tomee/blob/c31f000e/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
----------------------------------------------------------------------
diff --git a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
index fbf604b..1f9c81a 100644
--- a/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
+++ b/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
@@ -977,6 +977,11 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
*/
@Override
public void beforeStart(final StandardContext standardContext) {
+ if (standardContext.getResources() != null && LazyStopStandardRoot.class.isInstance(standardContext.getResources())) {
+ // reset after reload
+ Reflections.set(standardContext, "resources", LazyStopStandardRoot.class.cast(standardContext.getResources()).getDelegate());
+ }
+
final ServletContext sc = standardContext.getServletContext();
if (sc != null && !SystemInstance.get().getOptions().get(OPENEJB_JSESSION_ID_SUPPORT, true)) {
final Set<SessionTrackingMode> defaultTrackingModes = sc.getEffectiveSessionTrackingModes();
@@ -1932,7 +1937,27 @@ public class TomcatWebAppBuilder implements WebAppBuilder, ContextListener, Pare
*/
@Override
public void destroy(final StandardContext standardContext) {
- //No operation
+ final Loader standardContextLoader = standardContext.getLoader();
+ if (LazyStopLoader.class.isInstance(standardContextLoader)) {
+ final Loader delegate = LazyStopLoader.class.cast(standardContextLoader).getDelegateLoader();
+ if (TomEEWebappLoader.class.isInstance(delegate)) {
+ final TomEEWebappLoader webappLoader = TomEEWebappLoader.class.cast(delegate);
+ final ClassLoader loader = webappLoader.internalLoader();
+ webappLoader.clearLoader();
+ if (TomEEWebappClassLoader.class.isInstance(loader)) {
+ TomEEWebappClassLoader.class.cast(loader).internalDestroy();
+ }
+ }
+ }
+
+ final WebResourceRoot root = standardContext.getResources();
+ if (LazyStopStandardRoot.class.isInstance(root)) {
+ try {
+ LazyStopStandardRoot.class.cast(root).internalDestroy();
+ } catch (final LifecycleException e) {
+ throw new IllegalStateException(e);
+ }
+ }
}
/**