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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]