This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 20b6794  Simplify thread local listener
20b6794 is described below

commit 20b67945b055ddc0eef9d5d67ae754ab4533502b
Author: remm <r...@apache.org>
AuthorDate: Tue May 28 21:03:33 2019 +0200

    Simplify thread local listener
    
    I used ThreadLocalLeakPreventionListener for FrameworkListener, so use
    it to remove duplicate code.
---
 .../apache/catalina/core/FrameworkListener.java    | 12 +--
 .../core/ThreadLocalLeakPreventionListener.java    | 85 +++-------------------
 2 files changed, 17 insertions(+), 80 deletions(-)

diff --git a/java/org/apache/catalina/core/FrameworkListener.java 
b/java/org/apache/catalina/core/FrameworkListener.java
index 4927e49..b2a4f27 100644
--- a/java/org/apache/catalina/core/FrameworkListener.java
+++ b/java/org/apache/catalina/core/FrameworkListener.java
@@ -65,7 +65,7 @@ public abstract class FrameworkListener implements 
LifecycleListener, ContainerL
         }
     }
 
-    private void registerListenersForServer(Server server) {
+    protected void registerListenersForServer(Server server) {
         for (Service service : server.findServices()) {
             Engine engine = service.getContainer();
             if (engine != null) {
@@ -76,7 +76,7 @@ public abstract class FrameworkListener implements 
LifecycleListener, ContainerL
 
     }
 
-    private void registerListenersForEngine(Engine engine) {
+    protected void registerListenersForEngine(Engine engine) {
         for (Container hostContainer : engine.findChildren()) {
             Host host = (Host) hostContainer;
             host.addContainerListener(this);
@@ -84,18 +84,18 @@ public abstract class FrameworkListener implements 
LifecycleListener, ContainerL
         }
     }
 
-    private void registerListenersForHost(Host host) {
+    protected void registerListenersForHost(Host host) {
         for (Container contextContainer : host.findChildren()) {
             Context context = (Context) contextContainer;
             registerContextListener(context);
         }
     }
 
-    private void registerContextListener(Context context) {
+    protected void registerContextListener(Context context) {
         context.addLifecycleListener(createLifecycleListener(context));
     }
 
-    private void processContainerAddChild(Container parent, Container child) {
+    protected void processContainerAddChild(Container parent, Container child) 
{
         if (child instanceof Context) {
             registerContextListener((Context) child);
         } else if (child instanceof Engine) {
@@ -105,7 +105,7 @@ public abstract class FrameworkListener implements 
LifecycleListener, ContainerL
         }
     }
 
-    private void processContainerRemoveChild(Container parent, Container 
child) {
+    protected void processContainerRemoveChild(Container parent, Container 
child) {
         if (child instanceof Host || child instanceof Engine) {
             child.removeContainerListener(this);
         }
diff --git 
a/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java 
b/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
index 696e734..21905ab 100644
--- a/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
+++ b/java/org/apache/catalina/core/ThreadLocalLeakPreventionListener.java
@@ -21,10 +21,8 @@ import java.util.concurrent.Executor;
 
 import org.apache.catalina.Container;
 import org.apache.catalina.ContainerEvent;
-import org.apache.catalina.ContainerListener;
 import org.apache.catalina.Context;
 import org.apache.catalina.Engine;
-import org.apache.catalina.Host;
 import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleEvent;
 import org.apache.catalina.LifecycleListener;
@@ -52,8 +50,7 @@ import org.apache.tomcat.util.threads.ThreadPoolExecutor;
  * This listener must be declared in server.xml to be active.
  *
  */
-public class ThreadLocalLeakPreventionListener implements LifecycleListener,
-        ContainerListener {
+public class ThreadLocalLeakPreventionListener extends FrameworkListener {
 
     private static final Log log =
         LogFactory.getLog(ThreadLocalLeakPreventionListener.class);
@@ -73,17 +70,9 @@ public class ThreadLocalLeakPreventionListener implements 
LifecycleListener,
     @Override
     public void lifecycleEvent(LifecycleEvent event) {
         try {
-            Lifecycle lifecycle = event.getLifecycle();
-            if (Lifecycle.AFTER_START_EVENT.equals(event.getType()) &&
-                    lifecycle instanceof Server) {
-                // when the server starts, we register ourself as listener for
-                // all context
-                // as well as container event listener so that we know when new
-                // Context are deployed
-                Server server = (Server) lifecycle;
-                registerListenersForServer(server);
-            }
+            super.lifecycleEvent(event);
 
+            Lifecycle lifecycle = event.getLifecycle();
             if (Lifecycle.BEFORE_STOP_EVENT.equals(event.getType()) &&
                     lifecycle instanceof Server) {
                 // Server is shutting down, so thread pools will be shut down 
so
@@ -107,14 +96,7 @@ public class ThreadLocalLeakPreventionListener implements 
LifecycleListener,
     @Override
     public void containerEvent(ContainerEvent event) {
         try {
-            String type = event.getType();
-            if (Container.ADD_CHILD_EVENT.equals(type)) {
-                processContainerAddChild(event.getContainer(),
-                    (Container) event.getData());
-            } else if (Container.REMOVE_CHILD_EVENT.equals(type)) {
-                processContainerRemoveChild(event.getContainer(),
-                    (Container) event.getData());
-            }
+            super.containerEvent(event);
         } catch (Exception e) {
             String msg =
                 sm.getString(
@@ -125,63 +107,13 @@ public class ThreadLocalLeakPreventionListener implements 
LifecycleListener,
 
     }
 
-    private void registerListenersForServer(Server server) {
-        for (Service service : server.findServices()) {
-            Engine engine = service.getContainer();
-            if (engine != null) {
-                engine.addContainerListener(this);
-                registerListenersForEngine(engine);
-            }
-        }
-
-    }
-
-    private void registerListenersForEngine(Engine engine) {
-        for (Container hostContainer : engine.findChildren()) {
-            Host host = (Host) hostContainer;
-            host.addContainerListener(this);
-            registerListenersForHost(host);
-        }
-    }
-
-    private void registerListenersForHost(Host host) {
-        for (Container contextContainer : host.findChildren()) {
-            Context context = (Context) contextContainer;
-            registerContextListener(context);
-        }
-    }
-
-    private void registerContextListener(Context context) {
-        context.addLifecycleListener(this);
-    }
-
-    protected void processContainerAddChild(Container parent, Container child) 
{
-        if (log.isDebugEnabled())
-            log.debug("Process addChild[parent=" + parent + ",child=" + child +
-                "]");
-
-        if (child instanceof Context) {
-            registerContextListener((Context) child);
-        } else if (child instanceof Engine) {
-            registerListenersForEngine((Engine) child);
-        } else if (child instanceof Host) {
-            registerListenersForHost((Host) child);
-        }
-
-    }
-
     protected void processContainerRemoveChild(Container parent,
         Container child) {
-
-        if (log.isDebugEnabled())
-            log.debug("Process removeChild[parent=" + parent + ",child=" +
-                child + "]");
-
         if (child instanceof Context) {
             Context context = (Context) child;
             context.removeLifecycleListener(this);
-        } else if (child instanceof Host || child instanceof Engine) {
-            child.removeContainerListener(this);
+        } else {
+            super.processContainerRemoveChild(parent, child);
         }
     }
 
@@ -227,4 +159,9 @@ public class ThreadLocalLeakPreventionListener implements 
LifecycleListener,
             }
         }
     }
+
+    @Override
+    protected LifecycleListener createLifecycleListener(Context context) {
+        return this;
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to