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);
+            }
+        }
     }
 
     /**