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