diff --git a/.github/ISSUE_TEMPLATE/----.md b/.github/ISSUE_TEMPLATE/----.md
deleted file mode 100644
index e4063178..00000000
--- a/.github/ISSUE_TEMPLATE/----.md
+++ /dev/null
@@ -1,30 +0,0 @@
----
-name: 问题报告
-about: 描述清楚问题和当前环境
-
----
-
-**操作环境**
-
-|...|...|
-|---|---|
-|操作系统|Linux|
-|JVM版本|OpenJDK-8.0.5|
-|沙箱容器版本|1.1.0|
-|沙箱API版本|1.0.16|
-
-**问题描述**
-
-简明扼要的描述清楚遇到的问题
-
-**重现步骤**
-
-描述通过怎样的操作重现你的问题和疑惑
-1. 第一步
-2. 第二步
-3. 第三步
-4. ...
-
-**附件(如有)**
-
-在这个环节添加上可能的附件
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 331306b5..00000000
--- a/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-## for IDEA
-.idea
-*.iml
-
-## for maven
-pom.xml.versionsBackup
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index e3b9aa8e..00000000
--- a/.travis.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-language: generic
-
-jdk:
- - openjdk6
- - oraclejdk6
-
-cache:
- directories:
- - "$HOME/.m2/repository"
-
-script:
- - mvn clean cobertura:cobertura -Dmaven.test.skip=false
-
-after_success:
- - bash <(curl -s https://codecov.io/bash)
\ No newline at end of file
diff --git a/bin/sandbox.properties b/bin/sandbox.properties
index a1e9f2fe..65555b0e 100755
--- a/bin/sandbox.properties
+++ b/bin/sandbox.properties
@@ -24,9 +24,3 @@ user_module=~/.sandbox-module;
# switch the sandbox can enhance system class
unsafe.enable=true
-# define the sandbox event pool arguments(min/max/total)
-event.pool.enable=true
-event.pool.max.total=6000
-event.pool.min.idle.per.event=50
-event.pool.max.idle.per.event=100
-event.pool.max.total.per.event=2000
diff --git a/pom.xml b/pom.xml
index d03352bd..5f263e92 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,14 +5,14 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
pom
sandbox ${sandbox.version}
UTF-8
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
diff --git a/sandbox-agent/pom.xml b/sandbox-agent/pom.xml
index 6037e4a7..5ce9c8c8 100755
--- a/sandbox-agent/pom.xml
+++ b/sandbox-agent/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-agent
sandbox-agent ${sandbox.version}
diff --git a/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class b/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class
deleted file mode 100644
index 241b74a2..00000000
Binary files a/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/AgentLauncher.class and /dev/null differ
diff --git a/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/SandboxClassLoader.class b/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/SandboxClassLoader.class
deleted file mode 100644
index 9aa22bb4..00000000
Binary files a/sandbox-agent/target/classes/com/alibaba/jvm/sandbox/agent/SandboxClassLoader.class and /dev/null differ
diff --git a/sandbox-api/pom.xml b/sandbox-api/pom.xml
index 038bf51d..0efc41f5 100755
--- a/sandbox-api/pom.xml
+++ b/sandbox-api/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-api
sandbox-api ${sandbox.version}
@@ -21,10 +21,13 @@
com.alibaba.jvm.sandbox
sandbox-common-api
+
+
javax.servlet
javax.servlet-api
+
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java
new file mode 100644
index 00000000..b103c9a8
--- /dev/null
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/annotation/Command.java
@@ -0,0 +1,34 @@
+package com.alibaba.jvm.sandbox.api.annotation;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+/**
+ * 模块命令注解,拥有此注解的模块方法将能接收到从{@code sandbox.sh -d} 发出的命令
+ *
+ * 有这个注解的方法只能接收四类型的参数:
+ *
+ * - 命令参数: {@code Map}
+ * - 命令参数: {@code Map}
+ * - 命令参数: {@code String}
+ * - 文本输出: {@code PrintWriter}
+ *
+ *
+ * @author luanjia@taobao.com
+ * @since {@code sandbox-api:1.2.0}
+ */
+@Target(METHOD)
+@Retention(RUNTIME)
+public @interface Command {
+
+ /**
+ * 命令名称
+ *
+ * @return 命令名称
+ */
+ String value();
+
+}
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java
index 39badc2d..699c165b 100755
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/Http.java
@@ -9,9 +9,11 @@
* HTTP服务请求
*
* @author luanjia@taobao.com
+ * @deprecated 请使用 {@link com.alibaba.jvm.sandbox.api.annotation.Command}
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
+@Deprecated
public @interface Http {
/**
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java
index 3181020c..3ce92aa6 100755
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.java
@@ -5,6 +5,7 @@
*
* @author luanjia@taobao.com
*/
+@Deprecated
public interface TextMessageListener extends WebSocketConnectionListener {
/**
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java
index 4b09cb3a..38f72f61 100755
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.java
@@ -7,6 +7,7 @@
*
* @author luanjia@taobao.com
*/
+@Deprecated
public interface WebSocketAcceptor {
/**
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java
index e1017804..9839562a 100755
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.java
@@ -7,6 +7,7 @@
*
* @author luanjia@taobao.com
*/
+@Deprecated
public interface WebSocketConnection {
/**
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java
index 22e19918..e8801e08 100755
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.java
@@ -5,6 +5,7 @@
*
* @author luanjia@taobao.com
*/
+@Deprecated
public interface WebSocketConnectionListener {
/**
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java
index 57378215..4a547f42 100644
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.java
@@ -33,6 +33,23 @@ protected OpStack initialValue() {
@Override
final public void onEvent(final Event event) throws Throwable {
+ final OpStack opStack = opStackRef.get();
+ try {
+ switchEvent(opStack, event);
+ } finally {
+ // 如果执行到TOP的最后一个事件,则需要主动清理占用的资源
+ if (opStack.isEmpty()) {
+ opStackRef.remove();
+ }
+ }
+
+ }
+
+
+ // 执行事件
+ private void switchEvent(final OpStack opStack,
+ final Event event) throws Throwable {
+
switch (event.type) {
case BEFORE: {
final BeforeEvent bEvent = (BeforeEvent) event;
@@ -50,7 +67,6 @@ final public void onEvent(final Event event) throws Throwable {
bEvent.target
);
- final OpStack opStack = opStackRef.get();
final Advice top;
final Advice parent;
@@ -78,11 +94,12 @@ final public void onEvent(final Event event) throws Throwable {
case IMMEDIATELY_THROWS:
case IMMEDIATELY_RETURN: {
final InvokeEvent invokeEvent = (InvokeEvent) event;
- opStackRef.get().popByExpectInvokeId(invokeEvent.invokeId);
+ opStack.popByExpectInvokeId(invokeEvent.invokeId);
+ // 修复#123
+ break;
}
case RETURN: {
- final OpStack opStack = opStackRef.get();
final ReturnEvent rEvent = (ReturnEvent) event;
final WrapAdvice wrapAdvice = opStack.popByExpectInvokeId(rEvent.invokeId);
if (null != wrapAdvice) {
@@ -91,7 +108,6 @@ final public void onEvent(final Event event) throws Throwable {
break;
}
case THROWS: {
- final OpStack opStack = opStackRef.get();
final ThrowsEvent tEvent = (ThrowsEvent) event;
final WrapAdvice wrapAdvice = opStack.popByExpectInvokeId(tEvent.invokeId);
if (null != wrapAdvice) {
@@ -101,7 +117,6 @@ final public void onEvent(final Event event) throws Throwable {
}
case CALL_BEFORE: {
- final OpStack opStack = opStackRef.get();
final CallBeforeEvent cbEvent = (CallBeforeEvent) event;
final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(cbEvent.invokeId);
if (null == wrapAdvice) {
@@ -125,7 +140,6 @@ final public void onEvent(final Event event) throws Throwable {
}
case CALL_RETURN: {
- final OpStack opStack = opStackRef.get();
final CallReturnEvent crEvent = (CallReturnEvent) event;
final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(crEvent.invokeId);
if (null == wrapAdvice) {
@@ -147,7 +161,6 @@ final public void onEvent(final Event event) throws Throwable {
}
case CALL_THROWS: {
- final OpStack opStack = opStackRef.get();
final CallThrowsEvent ctEvent = (CallThrowsEvent) event;
final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(ctEvent.invokeId);
if (null == wrapAdvice) {
@@ -170,7 +183,6 @@ final public void onEvent(final Event event) throws Throwable {
}
case LINE: {
- final OpStack opStack = opStackRef.get();
final LineEvent lEvent = (LineEvent) event;
final WrapAdvice wrapAdvice = opStack.peekByExpectInvokeId(lEvent.invokeId);
if (null == wrapAdvice) {
@@ -208,6 +220,12 @@ void pushForBegin(final Advice advice) {
adviceStack.push(new WrapAdvice(advice));
}
+ WrapAdvice pop() {
+ return !adviceStack.isEmpty()
+ ? adviceStack.pop()
+ : null;
+ }
+
/**
* 在通知堆栈中,BEFORE:[RETURN/THROWS]的invokeId是配对的,
* 如果发生错位则说明BEFORE的事件没有被成功压入堆栈,没有被正确的处理,外界没有正确感知BEFORE
diff --git a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java
index 48943dc6..21971d3a 100644
--- a/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java
+++ b/sandbox-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/EventMonitor.java
@@ -7,7 +7,9 @@
*
* @author luanjia@taobao.com
* @since {@code sandbox-api:1.0.9}
+ * @deprecated 后续不再支持事件池
*/
+@Deprecated
public interface EventMonitor {
/**
@@ -15,6 +17,7 @@ public interface EventMonitor {
*
* @author luanjia@taobao.com
* @since {@code sandbox-api:1.0.9}
+ * @deprecated 后续不再支持事件池
*/
interface EventPoolInfo {
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class
deleted file mode 100644
index e0c8a17b..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/LoadCompleted.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class
deleted file mode 100644
index bca61491..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleLifecycle.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class
deleted file mode 100644
index a6be8d69..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException$State.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException.class
deleted file mode 100644
index a74823fa..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessControlException.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class
deleted file mode 100644
index e86fe456..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/ProcessController.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class
deleted file mode 100644
index 9c5e5fd7..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeBootstrap.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeSubClasses.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeSubClasses.class
deleted file mode 100644
index d64b857d..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/IncludeSubClasses.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/Stealth.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/Stealth.class
deleted file mode 100644
index f5a45dfb..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/annotation/Stealth.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/BeforeEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/BeforeEvent.class
deleted file mode 100644
index 3e86af8f..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/BeforeEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class
deleted file mode 100644
index 79e59670..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallBeforeEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallReturnEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallReturnEvent.class
deleted file mode 100644
index 0fda01f2..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallReturnEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class
deleted file mode 100644
index 412cd19c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/CallThrowsEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class
deleted file mode 100644
index f9d632f2..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event$Type.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class
deleted file mode 100644
index b9297c59..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/Event.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class
deleted file mode 100644
index 142201af..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyReturnEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyThrowsEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyThrowsEvent.class
deleted file mode 100644
index dbfbe855..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ImmediatelyThrowsEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class
deleted file mode 100644
index 0ced2205..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/InvokeEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class
deleted file mode 100644
index adcc939c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/LineEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class
deleted file mode 100644
index 03c9b1f6..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ReturnEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class
deleted file mode 100644
index 07854871..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/event/ThrowsEvent.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/AccessFlags.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/AccessFlags.class
deleted file mode 100644
index cd4f6bde..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/AccessFlags.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory$1.class
deleted file mode 100644
index e90cb035..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory$1.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory.class
deleted file mode 100644
index 033897e8..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter$ExtFilterFactory.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class
deleted file mode 100644
index 1f8a7a46..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/ExtFilter.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class
deleted file mode 100644
index 16f3de36..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/Filter.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class
deleted file mode 100644
index 6e141be2..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/NameRegexFilter.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class
deleted file mode 100644
index ec2c4152..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/filter/OrGroupFilter.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http$Method.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http$Method.class
deleted file mode 100644
index f683b5ca..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http$Method.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http.class
deleted file mode 100644
index cce836da..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/Http.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class
deleted file mode 100644
index 84e88d8c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/ConcurrentLinkedQueuePrinter.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class
deleted file mode 100644
index 64113ec1..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/printer/Printer.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class
deleted file mode 100644
index 64332b4e..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/TextMessageListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class
deleted file mode 100644
index 0898c4d0..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketAcceptor.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.class
deleted file mode 100644
index 112e6292..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnection.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.class
deleted file mode 100644
index 26b5d32c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/http/websocket/WebSocketConnectionListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class
deleted file mode 100644
index 2c605dea..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.class
deleted file mode 100644
index 4eef0dad..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/EventListenerFactory.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$1.class
deleted file mode 100644
index 4d35e84c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$1.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$WrapData.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$WrapData.class
deleted file mode 100644
index 259d373e..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry$WrapData.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class
deleted file mode 100644
index 2d2abaad..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/Sentry.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class
deleted file mode 100644
index a997f999..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener$1.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class
deleted file mode 100644
index ec5c3c4f..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ThreadSafeEventListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class
deleted file mode 100644
index a06906dd..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Advice.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class
deleted file mode 100644
index a4487c47..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$1.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class
deleted file mode 100644
index 1060fb38..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$2.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class
deleted file mode 100644
index 34199cbe..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$3.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$BehaviorCacheKey.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$BehaviorCacheKey.class
deleted file mode 100644
index 156c0d80..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$BehaviorCacheKey.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class
deleted file mode 100644
index 609cdf24..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$CallTarget.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class
deleted file mode 100644
index e44f71ed..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$OpStack.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$WrapAdvice.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$WrapAdvice.class
deleted file mode 100644
index 58e03e60..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener$WrapAdvice.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class
deleted file mode 100644
index f6ec9618..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceAdapterListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class
deleted file mode 100644
index 458de9ca..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/AdviceListener.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class
deleted file mode 100644
index 54d38acb..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Attachment.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class
deleted file mode 100644
index 1741d4b7..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$ConstructorImpl.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class
deleted file mode 100644
index 024fc7e6..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior$MethodImpl.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class
deleted file mode 100644
index 98169437..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/Behavior.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$1.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$1.class
deleted file mode 100644
index 2a34c21e..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$1.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class
deleted file mode 100644
index 6bd7c986..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$2.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$3.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$3.class
deleted file mode 100644
index 39a293c3..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$3.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class
deleted file mode 100644
index 973aad96..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$4.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class
deleted file mode 100644
index d314b40c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForBehavior.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class
deleted file mode 100644
index d9b5c5d3..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForClass.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class
deleted file mode 100644
index 5c80aaa1..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$BuildingForWatching.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$Group.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$Group.class
deleted file mode 100644
index 785add92..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$Group.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class
deleted file mode 100644
index 1bdea718..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForBehavior.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class
deleted file mode 100644
index 15483608..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForClass.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class
deleted file mode 100644
index 6ad723e0..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForUnWatching.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class
deleted file mode 100644
index 90d5fb00..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$IBuildingForWatching.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class
deleted file mode 100644
index 9067052b..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternGroupList.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class
deleted file mode 100644
index eb055ef1..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$PatternType.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class
deleted file mode 100644
index 5a1c133c..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder$ProgressGroup.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder.class
deleted file mode 100644
index 1cac3b15..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class
deleted file mode 100644
index 8049cd70..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class
deleted file mode 100644
index d1dee247..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/listener/ext/EventWatcher.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class
deleted file mode 100644
index f569e7bb..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor$EventPoolInfo.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor.class
deleted file mode 100644
index 99445eb6..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/EventMonitor.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class
deleted file mode 100644
index bcfed26e..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/LoadedClassDataSource.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleController.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleController.class
deleted file mode 100644
index a838fb3b..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleController.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class
deleted file mode 100644
index 40c9c1bb..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class
deleted file mode 100644
index 1e56d4f7..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$WatchCallback.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class
deleted file mode 100644
index 13891554..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class
deleted file mode 100644
index 2c34f2d3..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ModuleManager.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class
deleted file mode 100644
index b92dbd78..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor$Type.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class
deleted file mode 100644
index 2b212529..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/BehaviorDescriptor.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class
deleted file mode 100644
index 1c01ff2a..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet$CacheLoadUnCaughtException.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class
deleted file mode 100644
index 38e22710..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/CacheGet.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class
deleted file mode 100644
index 957c5bad..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaArrayUtils.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaCollectionUtils.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaCollectionUtils.class
deleted file mode 100644
index 9140c10f..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaCollectionUtils.class and /dev/null differ
diff --git a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaStringUtils.class b/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaStringUtils.class
deleted file mode 100644
index 30c8a46d..00000000
Binary files a/sandbox-api/target/classes/com/alibaba/jvm/sandbox/api/util/GaStringUtils.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase$1.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase$1.class
deleted file mode 100644
index 6dfad96f..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase$1.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class
deleted file mode 100644
index 00f6b5d1..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/AdviceListenerTestCase.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class
deleted file mode 100644
index 7f0e59fe..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/EventWatchBuilderTestCase.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class
deleted file mode 100644
index df83b55f..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderModuleEventWatcher.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class
deleted file mode 100644
index e1736ce7..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/mock/MockForBuilderProgress.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/util/ApiQaArrayUtils.class b/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/util/ApiQaArrayUtils.class
deleted file mode 100644
index fb7f5cc0..00000000
Binary files a/sandbox-api/target/test-classes/com/alibaba/jvm/sandbox/qatest/api/util/ApiQaArrayUtils.class and /dev/null differ
diff --git a/sandbox-api/target/test-classes/logback.xml b/sandbox-api/target/test-classes/logback.xml
deleted file mode 100755
index c7f37818..00000000
--- a/sandbox-api/target/test-classes/logback.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
- %d{yyyy-MM-dd HH:mm:ss} %5level %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/sandbox-common-api/pom.xml b/sandbox-common-api/pom.xml
index d823e237..d70f595d 100644
--- a/sandbox-common-api/pom.xml
+++ b/sandbox-common-api/pom.xml
@@ -6,7 +6,7 @@
sandbox
com.alibaba.jvm.sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-common-api
sandbox-common-api ${sandbox.version}
diff --git a/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java b/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java
index 8df7453b..d58cbc6f 100755
--- a/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java
+++ b/sandbox-common-api/src/main/java/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.java
@@ -93,7 +93,9 @@ public interface ConfigInfo {
* 在${SANDBOX_HOME}/cfg/sandbox.properties#event.pool.enable中进行开启关闭
*
* @return true:启用;false:不启用
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
boolean isEnableEventPool();
/**
@@ -101,7 +103,9 @@ public interface ConfigInfo {
*
* @return 单个事件类型缓存最小数量
* @deprecated 已经被废弃,推荐使用{@link #getEventPoolMaxIdlePerEvent()}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolKeyMin();
/**
@@ -109,7 +113,9 @@ public interface ConfigInfo {
*
* @return 单个事件类型缓存最大数量
* @deprecated 已被废弃,推荐使用{@link #getEventPoolMaxTotalPerEvent()}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolKeyMax();
/**
@@ -117,7 +123,9 @@ public interface ConfigInfo {
*
* @return 所有事件类型缓存最大总数量
* @deprecated 已被废弃,推荐使用{@link #getEventPoolMaxTotal()}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolTotal();
/**
@@ -125,7 +133,9 @@ public interface ConfigInfo {
*
* @return 事件池最大容量
* @since {@code sandbox-common-api:1.0.1}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolMaxTotal();
/**
@@ -133,7 +143,9 @@ public interface ConfigInfo {
*
* @return 事件池每个事件最小空闲容量
* @since {@code sandbox-common-api:1.0.1}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolMinIdlePerEvent();
/**
@@ -141,7 +153,9 @@ public interface ConfigInfo {
*
* @return 事件池每个事件最大空闲容量
* @since {@code sandbox-common-api:1.0.1}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolMaxIdlePerEvent();
/**
@@ -149,7 +163,9 @@ public interface ConfigInfo {
*
* @return 事件池每个事件最大容量
* @since {@code sandbox-common-api:1.0.1}
+ * @deprecated 后续不再支持事件池
*/
+ @Deprecated
int getEventPoolMaxTotalPerEvent();
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class
deleted file mode 100644
index 7e211bf8..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information$Mode.class and /dev/null differ
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class
deleted file mode 100644
index 8b255194..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Information.class and /dev/null differ
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class
deleted file mode 100644
index 1630ef51..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/Module.class and /dev/null differ
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException$ErrorCode.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException$ErrorCode.class
deleted file mode 100644
index 5a6759c3..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException$ErrorCode.class and /dev/null differ
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class
deleted file mode 100644
index 5bc9e065..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/ModuleException.class and /dev/null differ
diff --git a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class b/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class
deleted file mode 100644
index 7b9235a7..00000000
Binary files a/sandbox-common-api/target/classes/com/alibaba/jvm/sandbox/api/resource/ConfigInfo.class and /dev/null differ
diff --git a/sandbox-core/pom.xml b/sandbox-core/pom.xml
index 23b3c037..f880e109 100755
--- a/sandbox-core/pom.xml
+++ b/sandbox-core/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-core
sandbox-core ${sandbox.version}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java
index a16011a2..a6f654ac 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreConfigure.java
@@ -1,7 +1,6 @@
package com.alibaba.jvm.sandbox.core;
import com.alibaba.jvm.sandbox.api.Information;
-import com.alibaba.jvm.sandbox.api.event.Event;
import com.alibaba.jvm.sandbox.core.util.FeatureCodec;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
@@ -34,16 +33,6 @@ public class CoreConfigure {
private static final String KEY_CFG_LIB_PATH = "cfg";
private static final String VAL_LAUNCH_MODE_AGENT = "agent";
private static final String VAL_LAUNCH_MODE_ATTACH = "attach";
- private static final String KEY_EVENT_POOL_ENABLE = "event.pool.enable";
-
- // ------------------------------------- 事件池配置 -------------------------------------
- private static final String KEY_EVENT_POOL_MAX_TOTAL = "event.pool.max.total";
- private static final String KEY_EVENT_POOL_MIN_IDLE_PER_EVENT = "event.pool.min.idle.per.event";
- private static final int DEFAULT_VAL_EVENT_POOL_MIN_IDLE_PER_EVENT = 50;
- private static final String KEY_EVENT_POOL_MAX_IDLE_PER_EVENT = "event.pool.max.idle.per.event";
- private static final int DEFAULT_VAL_EVENT_POOL_MAX_IDLE_PER_EVENT = 100;
- private static final String KEY_EVENT_POOL_MAX_TOTAL_PER_EVENT = "event.pool.max.total.per.event";
- private static final int DEFAULT_VAL_EVENT_POOL_MAX_TOTAL_PER_EVENT = 2000;
private static final String KEY_UNSAFE_ENABLE = "unsafe.enable";
@@ -176,16 +165,6 @@ public synchronized File[] getUserModuleLibFiles() {
}
}
-// final DirectoryScanner scanner = new DirectoryScanner();
-// scanner.setIncludes(getUserModuleLibPaths());
-// scanner.setCaseSensitive(false);
-// scanner.scan();
-// final String[] filePaths = scanner.getIncludedDirectories();
-// final File[] files = new File[filePaths.length];
-// for (int index = 0; index < filePaths.length; index++) {
-// files[index] = new File(filePaths[index]);
-// }
-
return GET_USER_MODULE_LIB_FILES_CACHE = foundModuleJarFiles.toArray(new File[]{});
}
@@ -254,45 +233,6 @@ public Information.Mode getLaunchMode() {
return Information.Mode.ATTACH;
}
-
- public int getEventPoolMaxTotal() {
- return NumberUtils.toInt(
- featureMap.get(KEY_EVENT_POOL_MAX_TOTAL),
- getEventPoolMaxTotalPerEvent() * Event.Type.values().length
- );
- }
-
- public int getEventPoolMinIdlePerEvent() {
- return NumberUtils.toInt(
- featureMap.get(KEY_EVENT_POOL_MIN_IDLE_PER_EVENT),
- DEFAULT_VAL_EVENT_POOL_MIN_IDLE_PER_EVENT
- );
- }
-
- public int getEventPoolMaxIdlePerEvent() {
- return NumberUtils.toInt(
- featureMap.get(KEY_EVENT_POOL_MAX_IDLE_PER_EVENT),
- DEFAULT_VAL_EVENT_POOL_MAX_IDLE_PER_EVENT
- );
- }
-
- public int getEventPoolMaxTotalPerEvent() {
- return NumberUtils.toInt(
- featureMap.get(KEY_EVENT_POOL_MAX_TOTAL_PER_EVENT),
- DEFAULT_VAL_EVENT_POOL_MAX_TOTAL_PER_EVENT
- );
- }
-
-
- /**
- * 是否启用事件池
- *
- * @return event.pool.enable
- */
- public boolean isEventPoolEnable() {
- return BooleanUtils.toBoolean(featureMap.get(KEY_EVENT_POOL_ENABLE));
- }
-
/**
* 是否启用Unsafe功能
*
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java
index 8847a7bf..40cff20a 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/CoreLauncher.java
@@ -16,11 +16,6 @@ public CoreLauncher(final String targetJvmPid,
final String agentJarPath,
final String token) throws Exception {
- System.out.println(String.format("attaching to JVM(%s), agent-jar=%s;",
- targetJvmPid,
- agentJarPath
- ));
-
// 加载agent
attachAgent(targetJvmPid, agentJarPath, token);
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java
index df1657ba..5a9969b0 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.java
@@ -5,7 +5,7 @@
/**
* 中断式事件处理器
* 当事件处理器处理事件抛出异常时,将会中断原有方法调用
- * Created by luanjia@taobao.com on 16/7/26.
+ * @author luanjia@taobao.com
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java
index f9121a79..db057725 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.java
@@ -3,25 +3,23 @@
import com.alibaba.jvm.sandbox.api.ProcessControlException;
import com.alibaba.jvm.sandbox.api.event.BeforeEvent;
import com.alibaba.jvm.sandbox.api.event.Event;
-import com.alibaba.jvm.sandbox.api.event.ReturnEvent;
-import com.alibaba.jvm.sandbox.api.event.ThrowsEvent;
+import com.alibaba.jvm.sandbox.api.event.ImmediatelyReturnEvent;
+import com.alibaba.jvm.sandbox.api.event.ImmediatelyThrowsEvent;
import com.alibaba.jvm.sandbox.api.listener.EventListener;
-import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted;
-import com.alibaba.jvm.sandbox.core.util.EventPool;
import com.alibaba.jvm.sandbox.core.util.ObjectIDs;
import com.alibaba.jvm.sandbox.core.util.Sequencer;
-import com.alibaba.jvm.sandbox.core.util.collection.GaStack;
-import com.alibaba.jvm.sandbox.core.util.collection.ThreadUnsafeGaStack;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.com.alibaba.jvm.sandbox.spy.Spy;
-import java.lang.reflect.Method;
import java.util.Map;
-import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
-import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.unCaughtGetClassDeclaredJavaMethod;
+import static com.alibaba.jvm.sandbox.api.event.Event.Type.IMMEDIATELY_RETURN;
+import static com.alibaba.jvm.sandbox.api.event.Event.Type.IMMEDIATELY_THROWS;
+import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.isInterruptEventHandler;
+import static java.com.alibaba.jvm.sandbox.spy.Spy.Ret.newInstanceForNone;
+import static org.apache.commons.lang3.ArrayUtils.contains;
import static org.apache.commons.lang3.StringUtils.join;
/**
@@ -37,37 +35,24 @@ public class EventListenerHandlers {
private final Sequencer invokeIdSequencer = new Sequencer(1000);
// 全局处理器ID:处理器映射集合
- private final Map globalEventListenerMap
- = new ConcurrentHashMap();
-
- // 事件对象池
- private final EventPool eventPool = new EventPool();
-
- /**
- * 获取事件对象池
- *
- * @return 事件对象池
- */
- public EventPool getEventPool() {
- return eventPool;
- }
+ private final Map mappingOfEventProcessor
+ = new ConcurrentHashMap();
/**
* 注册事件处理器
*
- * @param listenerId 事件监听器ID
- * @param listener 事件监听器
- * @param eventTypeArray 监听事件集合
+ * @param listenerId 事件监听器ID
+ * @param listener 事件监听器
+ * @param eventTypes 监听事件集合
*/
public void active(final int listenerId,
final EventListener listener,
- final Event.Type[] eventTypeArray) {
- final EventListenerWrap wrap = new EventListenerWrap(listenerId, listener, eventTypeArray);
- globalEventListenerMap.put(listenerId, wrap);
+ final Event.Type[] eventTypes) {
+ mappingOfEventProcessor.put(listenerId, new EventProcessor(listenerId, listener, eventTypes));
logger.info("activated listener[id={};target={};] event={}",
listenerId,
listener,
- join(eventTypeArray, ",")
+ join(eventTypes, ",")
);
}
@@ -77,16 +62,18 @@ public void active(final int listenerId,
* @param listenerId 事件处理器ID
*/
public void frozen(int listenerId) {
- final EventListenerWrap wrap = globalEventListenerMap.remove(listenerId);
- if (null == wrap) {
+ final EventProcessor processor = mappingOfEventProcessor.remove(listenerId);
+ if (null == processor) {
logger.debug("ignore frozen listener[id={};], because not found.");
return;
}
logger.info("frozen listener[id={};target={};]",
listenerId,
- wrap.listener
+ processor.listener
);
+
+ processor.clean();
}
/**
@@ -96,7 +83,7 @@ public void frozen(int listenerId) {
* @param processId 调用过程ID
* @param invokeId 调用ID
* @param event 调用事件
- * @param wrap 事件处理器封装
+ * @param processor 事件处理器
* @return 处理返回结果
* @throws Throwable 当出现未知异常时,且事件处理器为中断流程事件时抛出
*/
@@ -104,20 +91,22 @@ private Spy.Ret handleEvent(final int listenerId,
final int processId,
final int invokeId,
final Event event,
- final EventListenerWrap wrap) throws Throwable {
- final EventListener listener = wrap.listener;
+ final EventProcessor processor) throws Throwable {
+ final EventListener listener = processor.listener;
try {
- // 调用事件处理
- listener.onEvent(event);
- if (logger.isDebugEnabled()) {
- logger.debug("on-event: event|{}|{}|{}@listener|{}",
- event.type,
- processId,
- invokeId,
- listenerId
- );
+ if (contains(processor.eventTypes, event.type)) {
+ // 调用事件处理
+ listener.onEvent(event);
+ if (logger.isDebugEnabled()) {
+ logger.debug("on-event: event|{}|{}|{}@listener|{}",
+ event.type,
+ processId,
+ invokeId,
+ listenerId
+ );
+ }
}
}
@@ -125,6 +114,8 @@ private Spy.Ret handleEvent(final int listenerId,
// 代码执行流程变更
catch (ProcessControlException pce) {
+ final EventProcessor.Process process = processor.processRef.get();
+
final ProcessControlException.State state = pce.getState();
logger.debug("on-event: event|{}|{}|{};listener|{}, process-changed: {}. isIgnoreProcessEvent={};",
event.type,
@@ -135,12 +126,10 @@ private Spy.Ret handleEvent(final int listenerId,
pce.isIgnoreProcessEvent()
);
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
-
// 如果流程控制要求忽略后续处理所有事件,则需要在此处进行标记
// 标记当前线程中、当前EventListener中需要主动忽略的ProcessId
if (pce.isIgnoreProcessEvent()) {
- eventProcess.markIgnoreProcessEvent(processId);
+ process.markIgnoreProcessId(processId);
}
switch (state) {
@@ -148,38 +137,51 @@ private Spy.Ret handleEvent(final int listenerId,
// 立即返回对象
case RETURN_IMMEDIATELY: {
- // 将BEFORE压入的堆栈弹出
+ // 如果在BeforeEvent处理过程中发生ProcessControl行为,将会造成堆栈错位
+ // 所以这里需要将错位的堆栈进行补齐
if (event instanceof BeforeEvent) {
- final GaStack stack = wrap.eventProcessRef.get().processStack;
- stack.pop();
- wrap.cleanIfLast();
- if (logger.isDebugEnabled()) {
- logger.debug("invoke-stack mock pop, IMMEDIATELY-RETURN deep={};listener={};pid={};iid={}",
- stack.deep(),
- listenerId,
- processId,
- invokeId
- );
- }
+ process.popInvokeId();
}
// 如果已经禁止后续返回任何事件了,则不进行后续的操作
if (pce.isIgnoreProcessEvent()) {
+ logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-return-event, isIgnored.",
+ event.type,
+ processId,
+ invokeId,
+ listenerId
+ );
return Spy.Ret.newInstanceForReturn(pce.getRespond());
}
- final ReturnEvent replaceReturnEvent = eventPool.borrowReturnEvent(processId, invokeId, pce.getRespond());
+ // 如果没有注册监听ImmediatelyEvent事件,则不进行后续的操作
+ if (!contains(processor.eventTypes, IMMEDIATELY_RETURN)) {
+ logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-return-event, not contains.",
+ event.type,
+ processId,
+ invokeId,
+ listenerId
+ );
+ return Spy.Ret.newInstanceForReturn(pce.getRespond());
+ }
+
+ // 这里需要补偿ImmediatelyEvent
+ final ImmediatelyReturnEvent immediatelyReturnEvent
+ = process
+ .getEventFactory()
+ .makeImmediatelyReturnEvent(processId, invokeId, pce.getRespond());
+
final Spy.Ret ret;
try {
ret = handleEvent(
listenerId,
processId,
invokeId,
- replaceReturnEvent,
- wrap
+ immediatelyReturnEvent,
+ processor
);
} finally {
- eventPool.returnEvent(replaceReturnEvent);
+ process.getEventFactory().returnEvent(immediatelyReturnEvent);
}
if (ret.state == Spy.Ret.RET_STATE_NONE) {
@@ -194,52 +196,65 @@ private Spy.Ret handleEvent(final int listenerId,
// 立即抛出异常
case THROWS_IMMEDIATELY: {
- // 将BEFORE压入的堆栈弹出
+ final Throwable throwable = (Throwable) pce.getRespond();
+
+ // 如果在BeforeEvent处理过程中发生ProcessControl行为,将会造成堆栈错位
+ // 所以这里需要将错位的堆栈进行补齐
if (event instanceof BeforeEvent) {
- final GaStack stack = wrap.eventProcessRef.get().processStack;
- stack.pop();
- wrap.cleanIfLast();
- if (logger.isDebugEnabled()) {
- logger.debug("invoke-stack mock pop, IMMEDIATELY-THROWS deep={};listener={};pid={};iid={}",
- stack.deep(),
- listenerId,
- processId,
- invokeId
- );
- }
+ process.popInvokeId();
}
- final Throwable throwable = (Throwable) pce.getRespond();
+ // 如果已经禁止后续返回任何事件了,则不进行后续的操作
+ if (pce.isIgnoreProcessEvent()) {
+ logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-throws-event, isIgnored.",
+ event.type,
+ processId,
+ invokeId,
+ listenerId
+ );
+ return Spy.Ret.newInstanceForThrows(throwable);
+ }
+
+ // 如果没有注册监听ImmediatelyEvent事件,则不进行后续的操作
+ if (!contains(processor.eventTypes, IMMEDIATELY_THROWS)) {
+ logger.debug("on-event: event|{}|{}|{};listener|{}, ignore immediately-throws-event, not contains.",
+ event.type,
+ processId,
+ invokeId,
+ listenerId
+ );
+ return Spy.Ret.newInstanceForThrows(throwable);
+ }
// 如果已经禁止后续返回任何事件了,则不进行后续的操作
if (pce.isIgnoreProcessEvent()) {
return Spy.Ret.newInstanceForThrows(throwable);
}
- if (!(event instanceof BeforeEvent)) {
-
- final ThrowsEvent replaceThrowsEvent = eventPool.borrowThrowsEvent(processId, invokeId, throwable);
- final Spy.Ret ret;
- try {
- ret = handleEvent(
- listenerId,
- processId,
- invokeId,
- replaceThrowsEvent,
- wrap
- );
- } finally {
- eventPool.returnEvent(replaceThrowsEvent);
- }
-
- if (ret.state == Spy.Ret.RET_STATE_NONE) {
- return Spy.Ret.newInstanceForThrows(throwable);
- } else {
- // 如果不是,则返回最新的处理结果
- return ret;
- }
- } else {
+ final ImmediatelyThrowsEvent immediatelyThrowsEvent
+ = process
+ .getEventFactory()
+ .makeImmediatelyThrowsEvent(processId, invokeId, throwable);
+
+
+ final Spy.Ret ret;
+ try {
+ ret = handleEvent(
+ listenerId,
+ processId,
+ invokeId,
+ immediatelyThrowsEvent,
+ processor
+ );
+ } finally {
+ process.getEventFactory().returnEvent(immediatelyThrowsEvent);
+ }
+
+ if (ret.state == Spy.Ret.RET_STATE_NONE) {
return Spy.Ret.newInstanceForThrows(throwable);
+ } else {
+ // 如果不是,则返回最新的处理结果
+ return ret;
}
}
@@ -247,7 +262,7 @@ private Spy.Ret handleEvent(final int listenerId,
// 什么都不操作,立即返回
case NONE_IMMEDIATELY:
default: {
- return Spy.Ret.newInstanceForNone();
+ return newInstanceForNone();
}
}
@@ -275,73 +290,11 @@ private Spy.Ret handleEvent(final int listenerId,
}
// 默认返回不进行任何流程变更
- return Spy.Ret.newInstanceForNone();
- }
-
- private boolean isInterruptEventHandler(final Class extends EventListener> listenerClass) {
- return listenerClass.isAnnotationPresent(Interrupted.class);
- }
-
-
- private final WeakHashMap spyNewInstanceForNoneMethodCache = new WeakHashMap();
- private final WeakHashMap spyNewInstanceForReturnMethodCache = new WeakHashMap();
- private final WeakHashMap spyNewInstanceForThrowsMethodCache = new WeakHashMap();
-
- // 转换当前的Spy.Ret到目标类所在ClassLoader的Spy.Ret
- private Object toSpyRetInTargetClassLoader(final Spy.Ret ret, final Class> spyRetClassInTargetClassLoader) throws Throwable {
-
- // 如果两个Spy.Ret的类相等,说明他们在同一个ClassLoader空间
- // 可以直接返回当前我们自己构造的Spy.Ret,不需要走如此复杂的反射
- if (Spy.Ret.class == spyRetClassInTargetClassLoader) {
- return ret;
- }
-
- // 如果当前Spy.Ret和目标ClassLoader中的Spy.Ret不一致,说明他们来自不同的ClassLoader空间
- // 此时就需要性能比较高昂的转换了,这里稍微加了几个MethodCache做了性能缓冲,尽量减少性能开销
- // 但此时我觉得必要性可能不大,后续考虑可以直接优化掉这个几个MethodCache
- switch (ret.state) {
- case Spy.Ret.RET_STATE_NONE: {
-
- final Method method;
- if (spyNewInstanceForNoneMethodCache.containsKey(spyRetClassInTargetClassLoader)) {
- method = spyNewInstanceForNoneMethodCache.get(spyRetClassInTargetClassLoader);
- } else {
- method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForNone");
- spyNewInstanceForNoneMethodCache.put(spyRetClassInTargetClassLoader, method);
- }
- return method.invoke(null);
- }
-
- case Spy.Ret.RET_STATE_RETURN: {
- final Method method;
- if (spyNewInstanceForReturnMethodCache.containsKey(spyRetClassInTargetClassLoader)) {
- method = spyNewInstanceForReturnMethodCache.get(spyRetClassInTargetClassLoader);
- } else {
- method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForReturn", Object.class);
- spyNewInstanceForReturnMethodCache.put(spyRetClassInTargetClassLoader, method);
- }
- return method.invoke(null, ret.respond);
- }
-
- case Spy.Ret.RET_STATE_THROWS: {
- final Method method;
- if (spyNewInstanceForThrowsMethodCache.containsKey(spyRetClassInTargetClassLoader)) {
- method = spyNewInstanceForThrowsMethodCache.get(spyRetClassInTargetClassLoader);
- } else {
- method = unCaughtGetClassDeclaredJavaMethod(spyRetClassInTargetClassLoader, "newInstanceForThrows", Throwable.class);
- spyNewInstanceForThrowsMethodCache.put(spyRetClassInTargetClassLoader, method);
- }
- return method.invoke(null, (Throwable) ret.respond);
- }
-
- default: {
- throw new IllegalStateException("illegal Spy.Ret.state=" + ret.state);
- }
- }
+ return newInstanceForNone();
}
private Spy.Ret handleOnBefore(final int listenerId,
- final ClassLoader javaClassLoader,
+ final int targetClassLoaderObjectID,
final String javaClassName,
final String javaMethodName,
final String javaMethodDesc,
@@ -349,47 +302,32 @@ private Spy.Ret handleOnBefore(final int listenerId,
final Object[] argumentArray) throws Throwable {
// 获取事件处理器
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
// 如果尚未注册,则直接返回,不做任何处理
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing before-event.", listenerId);
- return Spy.Ret.newInstanceForNone();
+ return newInstanceForNone();
}
// 获取调用跟踪信息
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
+ final EventProcessor.Process process = wrap.processRef.get();
// 调用ID
final int invokeId = invokeIdSequencer.next();
+ process.pushInvokeId(invokeId);
// 调用过程ID
- final int processId = stack.isEmpty()
- ? invokeId
- : stack.peekLast();
-
- // 将当前调用压栈
- stack.push(invokeId);
-
- if (logger.isDebugEnabled()) {
- logger.debug("invoke-stack push, deep={};listener={};pid={};iid={}",
- stack.deep(),
- listenerId,
- processId,
- invokeId
- );
- }
+ final int processId = process.getProcessId();
// 如果当前处理ID被忽略,则立即返回
- // 放在stack.push后边是为了对齐执行栈
- if (eventProcess.isIgnoreProcessEvent(processId)) {
- return Spy.Ret.newInstanceForNone();
- } else {
- eventProcess.cleanIgnoreProcessEvent();
+ if (process.touchIsIgnoreProcess(processId)) {
+ process.popInvokeId();
+ return newInstanceForNone();
}
- final BeforeEvent event = eventPool.borrowBeforeEvent(
+ final ClassLoader javaClassLoader = ObjectIDs.instance.getObject(targetClassLoaderObjectID);
+ final BeforeEvent event = process.getEventFactory().makeBeforeEvent(
processId,
invokeId,
javaClassLoader,
@@ -402,144 +340,103 @@ private Spy.Ret handleOnBefore(final int listenerId,
try {
return handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
+ process.getEventFactory().returnEvent(event);
}
}
/*
* 判断堆栈是否错位
*/
- private boolean isStackErrorPosition(final int processId,
- final int invokeId,
- final GaStack stack) {
- return (processId == invokeId && !stack.isEmpty())
- || (processId != invokeId && stack.isEmpty());
+ private boolean checkProcessStack(final int processId,
+ final int invokeId,
+ final boolean isEmptyStack) {
+ return (processId == invokeId && !isEmptyStack)
+ || (processId != invokeId && isEmptyStack);
}
private Spy.Ret handleOnEnd(final int listenerId,
final Object object,
final boolean isReturn) throws Throwable {
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
// 如果尚未注册,则直接返回,不做任何处理
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing return-event|throws-event.", listenerId);
- return Spy.Ret.newInstanceForNone();
+ return newInstanceForNone();
}
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
+ final EventProcessor.Process process = wrap.processRef.get();
// 如果当前调用过程信息堆栈是空的,说明
// 1. BEFORE/RETURN错位
// 2. super.
// 处理方式是直接返回,不做任何事件的处理和代码流程的改变,放弃对super.的观察,可惜了
- if (stack.isEmpty()) {
- return Spy.Ret.newInstanceForNone();
+ if (process.isEmptyStack()) {
+ return newInstanceForNone();
}
- final int processId = stack.peekLast();
- final int invokeId = stack.pop();
- wrap.cleanIfLast();
-
- if (logger.isDebugEnabled()) {
- logger.debug("invoke-stack pop, deep={};listener={};pid={};iid={}",
- stack.deep(),
- listenerId,
- processId,
- invokeId
- );
- }
+ final int processId = process.getProcessId();
+ final int invokeId = process.popInvokeId();
// 如果PID==IID说明已经到栈顶,此时需要核对堆栈是否为空
// 如果不为空需要输出日志进行告警
- if (isStackErrorPosition(processId, invokeId, stack)) {
- logger.warn("stack error position. deep={};listener={};", stack.deep(), listenerId);
+ if (checkProcessStack(processId, invokeId, process.isEmptyStack())) {
+ logger.warn("ERROR process-stack. pid={};iid={};listener={};",
+ processId,
+ invokeId,
+ listenerId
+ );
}
// 忽略事件处理
// 放在stack.pop()后边是为了对齐执行栈
- if (eventProcess.isIgnoreProcessEvent(processId)) {
- return Spy.Ret.newInstanceForNone();
+ if (process.touchIsIgnoreProcess(processId)) {
+ return newInstanceForNone();
}
final Event event = isReturn
- ? eventPool.borrowReturnEvent(processId, invokeId, object)
- : eventPool.borrowThrowsEvent(processId, invokeId, (Throwable) object);
+ ? process.getEventFactory().makeReturnEvent(processId, invokeId, object)
+ : process.getEventFactory().makeThrowsEvent(processId, invokeId, (Throwable) object);
try {
return handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
+ process.getEventFactory().returnEvent(event);
}
}
-
- private Object handleOnBeforeWithTargetClassLoaderSpyRet(final int listenerId,
- final ClassLoader javaClassLoader,
- final Class> spyRetClassInTargetClassLoader,
- final String javaClassName,
- final String javaMethodName,
- final String javaMethodDesc,
- final Object target,
- final Object[] argumentArray) throws Throwable {
- return toSpyRetInTargetClassLoader(
- handleOnBefore(
- listenerId,
- javaClassLoader,
- javaClassName,
- javaMethodName,
- javaMethodDesc,
- target,
- argumentArray
- ),
- spyRetClassInTargetClassLoader
- );
- }
-
- private Object handleOnReturnWithTargetClassLoaderSpyRet(final int listenerId,
- final Class> spyRetClassInTargetClassLoader,
- final Object object) throws Throwable {
- return toSpyRetInTargetClassLoader(handleOnEnd(listenerId, object, true), spyRetClassInTargetClassLoader);
- }
-
- private Object handleOnThrowsWithTargetClassLoaderSpyRet(final int listenerId,
- final Class> spyRetClassInTargetClassLoader,
- final Throwable throwable) throws Throwable {
- return toSpyRetInTargetClassLoader(handleOnEnd(listenerId, throwable, false), spyRetClassInTargetClassLoader);
- }
-
private void handleOnLine(final int listenerId,
final int lineNumber) throws Throwable {
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing line-event.", listenerId);
return;
}
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
+
+ final EventProcessor.Process process = wrap.processRef.get();
// 如果当前调用过程信息堆栈是空的,说明BEFORE/LINE错位
// 处理方式是直接返回,不做任何事件的处理和代码流程的改变
- if (stack.isEmpty()) {
+ if (process.isEmptyStack()) {
return;
}
- final int processId = stack.peekLast();
- final int invokeId = stack.peek();
+
+ final int processId = process.getProcessId();
+ final int invokeId = process.getInvokeId();
// 如果事件处理流被忽略,则直接返回,不产生后续事件
- if (eventProcess.isIgnoreProcessEvent(processId)) {
+ if (process.touchIsIgnoreProcess(processId)) {
return;
}
- final Event event = eventPool.borrowLineEvent(processId, invokeId, lineNumber);
+ final Event event = process.getEventFactory().makeLineEvent(processId, invokeId, lineNumber);
try {
handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
+ process.getEventFactory().returnEvent(event);
}
}
@@ -549,176 +446,103 @@ private void handleOnCallBefore(final int listenerId,
final String owner,
final String name,
final String desc) throws Throwable {
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing call-before-event.", listenerId);
return;
}
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
-
+ final EventProcessor.Process process = wrap.processRef.get();
// 如果当前调用过程信息堆栈是空的,有两种情况
// 1. CALL_BEFORE事件和BEFORE事件错位
// 2. 当前方法是,而CALL_BEFORE事件触发是当前方法在调用父类的
// super.会导致CALL_BEFORE事件优先于BEFORE事件
// 但如果按照现在的架构要兼容这种情况,比较麻烦,所以暂时先放弃了这部分的消息,可惜可惜
- if (stack.isEmpty()) {
+ if (process.isEmptyStack()) {
return;
}
- final int processId = stack.peekLast();
- final int invokeId = stack.peek();
+ final int processId = process.getProcessId();
+ final int invokeId = process.getInvokeId();
// 如果事件处理流被忽略,则直接返回,不产生后续事件
- if (eventProcess.isIgnoreProcessEvent(processId)) {
+ if (process.touchIsIgnoreProcess(processId)) {
return;
}
- final Event event = eventPool.borrowCallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc);
+ final Event event = process
+ .getEventFactory()
+ .makeCallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc);
try {
handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
+ process.getEventFactory().returnEvent(event);
}
}
private void handleOnCallReturn(final int listenerId) throws Throwable {
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing call-return-event.", listenerId);
return;
}
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
- if (stack.isEmpty()) {
+ final EventProcessor.Process process = wrap.processRef.get();
+ if (process.isEmptyStack()) {
return;
}
- final int processId = stack.peekLast();
- final int invokeId = stack.peek();
+ final int processId = process.getProcessId();
+ final int invokeId = process.getInvokeId();
// 如果事件处理流被忽略,则直接返回,不产生后续事件
- if (eventProcess.isIgnoreProcessEvent(processId)) {
+ if (process.touchIsIgnoreProcess(processId)) {
return;
}
- final Event event = eventPool.borrowCallReturnEvent(processId, invokeId);
+ final Event event = process
+ .getEventFactory()
+ .makeCallReturnEvent(processId, invokeId);
try {
handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
+ process.getEventFactory().returnEvent(event);
}
}
private void handleOnCallThrows(final int listenerId,
final String throwException) throws Throwable {
- final EventListenerWrap wrap = globalEventListenerMap.get(listenerId);
+ final EventProcessor wrap = mappingOfEventProcessor.get(listenerId);
if (null == wrap) {
logger.debug("listener={} is not activated, ignore processing call-throws-event.", listenerId);
return;
}
- final EventListenerWrap.EventProcess eventProcess = wrap.eventProcessRef.get();
- final GaStack stack = eventProcess.processStack;
- if (stack.isEmpty()) {
+ final EventProcessor.Process process = wrap.processRef.get();
+ if (process.isEmptyStack()) {
return;
}
- final int processId = stack.peekLast();
- final int invokeId = stack.peek();
+ final int processId = process.getProcessId();
+ final int invokeId = process.getInvokeId();
// 如果事件处理流被忽略,则直接返回,不产生后续事件
- if (eventProcess.isIgnoreProcessEvent(processId)) {
+ if (process.touchIsIgnoreProcess(processId)) {
return;
}
- final Event event = eventPool.borrowCallThrowsEvent(processId, invokeId, throwException);
+ final Event event = process
+ .getEventFactory()
+ .makeCallThrowsEvent(processId, invokeId, throwException);
try {
handleEvent(listenerId, processId, invokeId, event, wrap);
} finally {
- eventPool.returnEvent(event);
- }
- }
-
- /**
- * 事件处理器封装
- */
- private final class EventListenerWrap {
-
- class EventProcess {
-
- final GaStack processStack = new ThreadUnsafeGaStack();
- Integer ignoreProcessId = null;
-
- boolean isIgnoreProcessEvent(int targetProcessId) {
- return ignoreProcessId != null
- && ignoreProcessId == targetProcessId;
- }
-
- void markIgnoreProcessEvent(int processId) {
- this.ignoreProcessId = processId;
- }
-
- void cleanIgnoreProcessEvent() {
- this.ignoreProcessId = null;
- }
-
- }
-
- private final int listenerId;
- private final EventListener listener;
- private final ThreadLocal eventProcessRef = new ThreadLocal() {
- @Override
- protected EventProcess initialValue() {
- return new EventProcess();
- }
- };
-
- private EventListenerWrap(final int listenerId,
- final EventListener listener,
- final Event.Type[] eventTypeArray) {
-
- this.listenerId = listenerId;
-
- if (isInterruptEventHandler(listener.getClass())) {
- this.listener = new InterruptedEventListenerImpl(
- new SeparateImmediatelyEventListener(listener, eventTypeArray, eventPool)
- );
- } else {
- this.listener = new SeparateImmediatelyEventListener(listener, eventTypeArray, eventPool);
- }
+ process.getEventFactory().returnEvent(event);
}
-
- void cleanIfLast() {
- final EventProcess eventProcess = eventProcessRef.get();
- if (eventProcess.processStack.isEmpty()) {
- eventProcessRef.remove();
- logger.debug("clean TLS: listener-wrap, listener={};", listenerId);
- }
- }
-
- }
-
- @Interrupted
- private class InterruptedEventListenerImpl implements EventListener {
-
- private final EventListener listener;
-
- private InterruptedEventListenerImpl(EventListener listener) {
- this.listener = listener;
- }
-
- @Override
- public void onEvent(Event event) throws Throwable {
- listener.onEvent(event);
- }
-
}
@@ -730,7 +554,6 @@ public static EventListenerHandlers getSingleton() {
return singleton;
}
-
public static Object onBefore(final int listenerId,
final int targetClassLoaderObjectID,
final Class> spyRetClassInTargetClassLoader,
@@ -739,10 +562,9 @@ public static Object onBefore(final int listenerId,
final String javaMethodDesc,
final Object target,
final Object[] argumentArray) throws Throwable {
- return singleton.handleOnBeforeWithTargetClassLoaderSpyRet(
+ return singleton.handleOnBefore(
listenerId,
- (ClassLoader) ObjectIDs.instance.getObject(targetClassLoaderObjectID),
- spyRetClassInTargetClassLoader,
+ targetClassLoaderObjectID,
javaClassName,
javaMethodName,
javaMethodDesc,
@@ -754,13 +576,13 @@ public static Object onBefore(final int listenerId,
public static Object onReturn(final int listenerId,
final Class> spyRetClassInTargetClassLoader,
final Object object) throws Throwable {
- return singleton.handleOnReturnWithTargetClassLoaderSpyRet(listenerId, spyRetClassInTargetClassLoader, object);
+ return singleton.handleOnEnd(listenerId, object, true);
}
public static Object onThrows(final int listenerId,
final Class> spyRetClassInTargetClassLoader,
final Throwable throwable) throws Throwable {
- return singleton.handleOnThrowsWithTargetClassLoaderSpyRet(listenerId, spyRetClassInTargetClassLoader, throwable);
+ return singleton.handleOnEnd(listenerId, throwable, false);
}
public static void onLine(final int listenerId,
@@ -773,13 +595,7 @@ public static void onCallBefore(final int listenerId,
final String owner,
final String name,
final String desc) throws Throwable {
- singleton.handleOnCallBefore(
- listenerId,
- lineNumber,
- owner,
- name,
- desc
- );
+ singleton.handleOnCallBefore(listenerId, lineNumber, owner, name, desc);
}
public static void onCallReturn(final int listenerId) throws Throwable {
@@ -791,5 +607,15 @@ public static void onCallThrows(final int listenerId,
singleton.handleOnCallThrows(listenerId, throwException);
}
+ // ---- 自检查
+ public void checkEventProcessor(final int... listenerIds) {
+ for (int listenerId : listenerIds) {
+ final EventProcessor processor = mappingOfEventProcessor.get(listenerId);
+ if (null == processor) {
+ throw new IllegalStateException(String.format("listener=%s not existed.", listenerId));
+ }
+ processor.check();
+ }
+ }
}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java
new file mode 100644
index 00000000..082723f4
--- /dev/null
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/EventProcessor.java
@@ -0,0 +1,200 @@
+package com.alibaba.jvm.sandbox.core.enhance.weaver;
+
+import com.alibaba.jvm.sandbox.api.event.Event;
+import com.alibaba.jvm.sandbox.api.listener.EventListener;
+import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted;
+import com.alibaba.jvm.sandbox.core.util.collection.GaStack;
+import com.alibaba.jvm.sandbox.core.util.collection.ThreadUnsafeGaStack;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import static com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils.isInterruptEventHandler;
+
+/**
+ * 事件处理器
+ */
+class EventProcessor {
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ /**
+ * 处理单元
+ */
+ class Process {
+
+ // 事件工厂
+ private final SingleEventFactory eventFactory
+ = new SingleEventFactory();
+
+ // 调用堆栈
+ private final GaStack stack
+ = new ThreadUnsafeGaStack();
+
+ // 需要忽略的过程ID
+ private Integer ignoreProcessId = null;
+
+ void pushInvokeId(int invokeId) {
+ stack.push(invokeId);
+ logger.debug("push process-stack, invoke-id={};deep={};listener={};",
+ invokeId,
+ stack.deep(),
+ listenerId
+ );
+ }
+
+ int popInvokeId() {
+ final int invokeId = stack.pop();
+ logger.debug("pop process-stack, invoke-id={};deep={};listener={};",
+ invokeId,
+ stack.deep(),
+ listenerId
+ );
+ // 这里注释掉,避免频繁删除和创建ThreadLocal的开销
+ // 采用frozen的方式来释放
+// if (stack.isEmpty()) {
+// processRef.remove();
+// logger.debug("clean TLS: event-processor, listener={};", listenerId);
+// }
+ return invokeId;
+ }
+
+ int getInvokeId() {
+ return stack.peek();
+ }
+
+ int getProcessId() {
+ return stack.peekLast();
+ }
+
+ boolean isEmptyStack() {
+ return stack.isEmpty();
+ }
+
+ boolean touchIsIgnoreProcess(int processId) {
+ if (null != ignoreProcessId
+ && ignoreProcessId == processId) {
+ return true;
+ } else {
+ ignoreProcessId = null;
+ return false;
+ }
+ }
+
+ void markIgnoreProcessId(int processId) {
+ ignoreProcessId = processId;
+ }
+
+ SingleEventFactory getEventFactory() {
+ return eventFactory;
+ }
+
+ }
+
+ @Interrupted
+ private class InterruptedEventListenerImpl implements EventListener {
+
+ private final EventListener listener;
+
+ private InterruptedEventListenerImpl(EventListener listener) {
+ this.listener = listener;
+ }
+
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ listener.onEvent(event);
+ }
+
+ }
+
+ final int listenerId;
+ final EventListener listener;
+ final Event.Type[] eventTypes;
+ final ThreadLocal processRef = new ThreadLocal() {
+ @Override
+ protected Process initialValue() {
+ return new Process();
+ }
+ };
+
+ EventProcessor(final int listenerId,
+ final EventListener listener,
+ final Event.Type[] eventTypes) {
+
+ this.listenerId = listenerId;
+ this.eventTypes = eventTypes;
+ this.listener = isInterruptEventHandler(listener.getClass())
+ ? new InterruptedEventListenerImpl(listener)
+ : listener;
+ }
+
+ void clean() {
+ processRef.remove();
+ logger.debug("clean TLS: event-processor, listener={};", listenerId);
+ }
+
+
+ /**
+ * 校验器,用于校验事件处理器状态是否正确
+ * 用于测试用例
+ */
+ class Checker {
+
+ void check() {
+
+ final EventProcessor.Process process = processRef.get();
+ final ThreadUnsafeGaStack stack = (ThreadUnsafeGaStack) process.stack;
+
+ if (!process.isEmptyStack()) {
+ throw new IllegalStateException(String.format("process-stack is not empty! listener=%s;\n%s",
+ listenerId,
+ toString(stack)
+ ));
+ }
+
+ for (int index = 0; index < stack.getElementArray().length; index++) {
+ if (index <= stack.getCurrent()) {
+ if (null == stack.getElementArray()[index]) {
+ throw new IllegalStateException(String.format("process-stack element is null at index=[%d], listener=%s;\n%s",
+ index,
+ listenerId,
+ toString(stack)
+ ));
+ }
+ } else {
+ if (null != stack.getElementArray()[index]) {
+ throw new IllegalStateException(String.format("process-stack element is not null at index=[%d], listener=%s;\n%s",
+ index,
+ listenerId,
+ toString(stack)
+ ));
+ }
+ }
+ }
+
+ if (null != process.ignoreProcessId) {
+ throw new IllegalStateException(String.format("process ignoreProcessId is not null!, processId=%d", process.ignoreProcessId));
+ }
+
+
+ }
+
+ String toString(ThreadUnsafeGaStack stack) {
+ final StringBuilder stackSB = new StringBuilder(String.format("stack[deep=%d;current=%d;]{\n", stack.deep(), stack.getCurrent()));
+ for (int index = 0; index < stack.getElementArray().length; index++) {
+ stackSB.append("\t[" + index + "] = " + stack.getElementArray()[index] + "\n");
+ }
+ stackSB.append("}");
+ return stackSB.toString();
+ }
+
+ }
+
+ /**
+ * 校验事件处理器
+ * 用于测试用例
+ */
+ void check() {
+ new Checker().check();
+ }
+
+}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java
deleted file mode 100755
index f294be5b..00000000
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package com.alibaba.jvm.sandbox.core.enhance.weaver;
-
-import com.alibaba.jvm.sandbox.api.ProcessControlException;
-import com.alibaba.jvm.sandbox.api.event.*;
-import com.alibaba.jvm.sandbox.api.listener.EventListener;
-import com.alibaba.jvm.sandbox.core.util.EventPool;
-import org.apache.commons.lang3.ArrayUtils;
-
-import static com.alibaba.jvm.sandbox.core.enhance.weaver.SeparateImmediatelyEventListener.Step.*;
-
-/**
- * 用于分离"立即返回"/"返回"和"立即异常抛出事件"/"异常抛出事件"
- * Created by luanjia@taobao.com on 2017/2/26.
- */
-public class SeparateImmediatelyEventListener implements EventListener {
-
- enum Step {
- STEP_IMMEDIATELY_RETURN_EVENT,
- STEP_IMMEDIATELY_THROWS_EVENT,
- STEP_ORIGINAL_EVENT
- }
-
- private final ThreadLocal stepRef = new ThreadLocal() {
- @Override
- protected Step initialValue() {
- return STEP_ORIGINAL_EVENT;
- }
- };
-
-
- private final EventListener listener;
- private final EventPool eventPool;
- private final Event.Type[] eventTypeArray;
-
- public SeparateImmediatelyEventListener(final EventListener listener,
- final Event.Type[] eventTypeArray,
- final EventPool eventPool) {
- this.listener = listener;
- this.eventPool = eventPool;
- this.eventTypeArray = eventTypeArray;
- }
-
- @Override
- public void onEvent(final Event event) throws Throwable {
-
- // 只有BEFORE/RETURN/THROWS事件才需要进行分离
- if (!(event instanceof BeforeEvent)
- && !(event instanceof ReturnEvent)
- && !(event instanceof ThrowsEvent)) {
- if(!ArrayUtils.contains(eventTypeArray, event.type)) {
- return;
- }
- listener.onEvent(event);
- return;
- }
-
- // 分离Immediately事件
- final Event replaceEvent;
- final Step step = stepRef.get();
- switch (step) {
- case STEP_IMMEDIATELY_RETURN_EVENT: {
- final ReturnEvent returnEvent = (ReturnEvent) event;
- replaceEvent = eventPool.borrowImmediatelyReturnEvent(returnEvent.processId, returnEvent.invokeId, returnEvent.object);
- break;
- }
- case STEP_IMMEDIATELY_THROWS_EVENT: {
- final ThrowsEvent throwsEvent = (ThrowsEvent) event;
- replaceEvent = eventPool.borrowImmediatelyThrowsEvent(throwsEvent.processId, throwsEvent.invokeId, throwsEvent.throwable);
- break;
- }
- case STEP_ORIGINAL_EVENT:
- default: {
- replaceEvent = event;
- break;
- }
- }
-
- // 驱动分离后的事件
- try {
- stepRef.set(STEP_ORIGINAL_EVENT);
-
- // 如果当前事件(分离之后)不在事件监听范围,则直接忽略什么都不用处理
- if (!ArrayUtils.contains(eventTypeArray, replaceEvent.type)) {
- return;
- }
-
- // 处理事件
- listener.onEvent(replaceEvent);
-
- } catch (ProcessControlException pce) {
-
- switch (pce.getState()) {
- case RETURN_IMMEDIATELY: {
- stepRef.set(STEP_IMMEDIATELY_RETURN_EVENT);
- break;
- }
- case THROWS_IMMEDIATELY: {
- stepRef.set(STEP_IMMEDIATELY_THROWS_EVENT);
- break;
- }
- case NONE_IMMEDIATELY:
- default: {
- stepRef.set(STEP_ORIGINAL_EVENT);
- break;
- }
- }
-
- throw pce;
-
- } finally {
-
- // 发生了事件分离才需要归还
- if (replaceEvent != event
- && (replaceEvent instanceof ImmediatelyReturnEvent || replaceEvent instanceof ImmediatelyThrowsEvent)) {
- eventPool.returnEvent(replaceEvent);
- }
-
- }
-
- }
-
-}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java
new file mode 100644
index 00000000..a1dd3aff
--- /dev/null
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/SingleEventFactory.java
@@ -0,0 +1,200 @@
+package com.alibaba.jvm.sandbox.core.enhance.weaver;
+
+import com.alibaba.jvm.sandbox.api.event.*;
+import com.alibaba.jvm.sandbox.core.util.UnsafeUtils;
+import sun.misc.Unsafe;
+
+/**
+ * 单例事件工厂
+ */
+class SingleEventFactory {
+
+ private static final int ILLEGAL_PROCESS_ID = -1;
+ private static final int ILLEGAL_INVOKE_ID = -1;
+
+ private static final Unsafe unsafe;
+ private static final long processIdFieldInInvokeEventOffset;
+ private static final long invokeIdFieldInInvokeEventOffset;
+ private static final long javaClassLoaderFieldInBeforeEventOffset;
+ private static final long javaClassNameFieldInBeforeEventOffset;
+ private static final long javaMethodNameFieldInBeforeEventOffset;
+ private static final long javaMethodDescFieldInBeforeEventOffset;
+ private static final long targetFieldInBeforeEventOffset;
+ private static final long argumentArrayFieldInBeforeEventOffset;
+ private static final long objectFieldInReturnEventOffset;
+ private static final long throwableFieldInThrowsEventOffset;
+ private static final long lineNumberFieldInLineEventOffset;
+
+ private static final long lineNumberFieldInCallBeforeEventOffset;
+ private static final long ownerFieldInCallBeforeEventOffset;
+ private static final long nameFieldInCallBeforeEventOffset;
+ private static final long descFieldInCallBeforeEventOffset;
+ private static final long throwExceptionFieldInCallThrowsEventOffset;
+
+ static {
+ try {
+ unsafe = UnsafeUtils.getUnsafe();
+ processIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("processId"));
+ invokeIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("invokeId"));
+ javaClassLoaderFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassLoader"));
+ javaClassNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassName"));
+ javaMethodNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodName"));
+ javaMethodDescFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodDesc"));
+ targetFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("target"));
+ argumentArrayFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("argumentArray"));
+ objectFieldInReturnEventOffset = unsafe.objectFieldOffset(ReturnEvent.class.getDeclaredField("object"));
+ throwableFieldInThrowsEventOffset = unsafe.objectFieldOffset(ThrowsEvent.class.getDeclaredField("throwable"));
+ lineNumberFieldInLineEventOffset = unsafe.objectFieldOffset(LineEvent.class.getDeclaredField("lineNumber"));
+
+ lineNumberFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("lineNumber"));
+ ownerFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("owner"));
+ nameFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("name"));
+ descFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("desc"));
+ throwExceptionFieldInCallThrowsEventOffset = unsafe.objectFieldOffset(CallThrowsEvent.class.getDeclaredField("throwException"));
+ } catch (Exception e) {
+ throw new Error(e);
+ }
+ }
+
+ private final BeforeEvent beforeEvent
+ = new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null);
+
+ private final ReturnEvent returnEvent
+ = new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
+
+ private final ThrowsEvent throwsEvent
+ = new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
+
+ private final LineEvent lineEvent
+ = new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1);
+
+ private final ImmediatelyThrowsEvent immediatelyThrowsEvent
+ = new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
+
+ private final ImmediatelyReturnEvent immediatelyReturnEvent
+ = new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
+
+ private final CallBeforeEvent callBeforeEvent
+ = new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null);
+
+ private final CallReturnEvent callReturnEvent
+ = new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID);
+
+ private final CallThrowsEvent callThrowsEvent
+ = new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
+
+
+ public BeforeEvent makeBeforeEvent(final int processId,
+ final int invokeId,
+ final ClassLoader javaClassLoader,
+ final String javaClassName,
+ final String javaMethodName,
+ final String javaMethodDesc,
+ final Object target,
+ final Object[] argumentArray) {
+ unsafe.putInt(beforeEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(beforeEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(beforeEvent, javaClassLoaderFieldInBeforeEventOffset, javaClassLoader);
+ unsafe.putObject(beforeEvent, javaClassNameFieldInBeforeEventOffset, javaClassName);
+ unsafe.putObject(beforeEvent, javaMethodNameFieldInBeforeEventOffset, javaMethodName);
+ unsafe.putObject(beforeEvent, javaMethodDescFieldInBeforeEventOffset, javaMethodDesc);
+ unsafe.putObject(beforeEvent, targetFieldInBeforeEventOffset, target);
+ unsafe.putObject(beforeEvent, argumentArrayFieldInBeforeEventOffset, argumentArray);
+ return beforeEvent;
+ }
+
+ public ReturnEvent makeReturnEvent(final int processId,
+ final int invokeId,
+ final Object returnObj) {
+ unsafe.putInt(returnEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(returnEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(returnEvent, objectFieldInReturnEventOffset, returnObj);
+ return returnEvent;
+ }
+
+ public ImmediatelyReturnEvent makeImmediatelyReturnEvent(final int processId,
+ final int invokeId,
+ final Object returnObj) {
+ unsafe.putInt(immediatelyReturnEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(immediatelyReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(immediatelyReturnEvent, objectFieldInReturnEventOffset, returnObj);
+ return immediatelyReturnEvent;
+ }
+
+ public ThrowsEvent makeThrowsEvent(final int processId,
+ final int invokeId,
+ final Throwable throwable) {
+ unsafe.putInt(throwsEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(throwsEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(throwsEvent, throwableFieldInThrowsEventOffset, throwable);
+ return throwsEvent;
+ }
+
+ public ImmediatelyThrowsEvent makeImmediatelyThrowsEvent(final int processId,
+ final int invokeId,
+ final Throwable throwable) {
+ unsafe.putInt(immediatelyThrowsEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(immediatelyThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(immediatelyThrowsEvent, throwableFieldInThrowsEventOffset, throwable);
+ return immediatelyThrowsEvent;
+ }
+
+
+
+ public LineEvent makeLineEvent(final int processId,
+ final int invokeId,
+ final int lineNumber) {
+ unsafe.putInt(lineEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(lineEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putInt(lineEvent, lineNumberFieldInLineEventOffset, lineNumber);
+ return lineEvent;
+ }
+
+ public CallBeforeEvent makeCallBeforeEvent(final int processId,
+ final int invokeId,
+ final int lineNumber,
+ final String owner,
+ final String name,
+ final String desc) {
+ unsafe.putInt(callBeforeEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(callBeforeEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putInt(callBeforeEvent, lineNumberFieldInCallBeforeEventOffset, lineNumber);
+ unsafe.putObject(callBeforeEvent, ownerFieldInCallBeforeEventOffset, owner);
+ unsafe.putObject(callBeforeEvent, nameFieldInCallBeforeEventOffset, name);
+ unsafe.putObject(callBeforeEvent, descFieldInCallBeforeEventOffset, desc);
+ return callBeforeEvent;
+ }
+
+ public CallReturnEvent makeCallReturnEvent(final int processId,
+ final int invokeId) {
+ unsafe.putInt(callReturnEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(callReturnEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ return callReturnEvent;
+ }
+
+ public CallThrowsEvent makeCallThrowsEvent(final int processId,
+ final int invokeId,
+ final String throwException) {
+ unsafe.putInt(callThrowsEvent, processIdFieldInInvokeEventOffset, processId);
+ unsafe.putInt(callThrowsEvent, invokeIdFieldInInvokeEventOffset, invokeId);
+ unsafe.putObject(callThrowsEvent, throwExceptionFieldInCallThrowsEventOffset, throwException);
+ return callThrowsEvent;
+ }
+
+ public void returnEvent(Event event) {
+ switch (event.type) {
+ case BEFORE:
+ unsafe.putObject(event, targetFieldInBeforeEventOffset, null);
+ unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, null);
+ break;
+ case IMMEDIATELY_THROWS:
+ case THROWS:
+ unsafe.putObject(event, throwableFieldInThrowsEventOffset, null);
+ break;
+ case IMMEDIATELY_RETURN:
+ case RETURN:
+ unsafe.putObject(event, objectFieldInReturnEventOffset, null);
+ }
+ }
+
+}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java
index e3f11522..7cc0372f 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.java
@@ -194,9 +194,6 @@ private void loadClassLoader() {
@Override
protected void onMethodEnter() {
- isMethodEnter = true;
- mark(beginLabel);
-
codeLockForTracing.lock(new CodeLock.Block() {
@Override
public void code() {
@@ -214,6 +211,8 @@ public void code() {
storeArgArray();
pop();
processControl();
+ isMethodEnter = true;
+ mark(beginLabel);
}
});
}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java
index 928ccf33..730870ee 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.java
@@ -69,45 +69,45 @@ public String[] getUserModuleLibPaths() {
@Override
public boolean isEnableEventPool() {
- return cfg.isEventPoolEnable();
+ return false;
}
@Deprecated
@Override
public int getEventPoolKeyMin() {
- return getEventPoolMaxIdlePerEvent();
+ return 0;
}
@Deprecated
@Override
public int getEventPoolKeyMax() {
- return getEventPoolMaxTotal();
+ return 0;
}
@Deprecated
@Override
public int getEventPoolTotal() {
- return getEventPoolMaxTotal();
+ return 0;
}
@Override
public int getEventPoolMaxTotal() {
- return cfg.getEventPoolMaxTotal();
+ return 0;
}
@Override
public int getEventPoolMinIdlePerEvent() {
- return cfg.getEventPoolMinIdlePerEvent();
+ return 0;
}
@Override
public int getEventPoolMaxIdlePerEvent() {
- return cfg.getEventPoolMaxIdlePerEvent();
+ return 0;
}
@Override
public int getEventPoolMaxTotalPerEvent() {
- return cfg.getEventPoolMaxTotalPerEvent();
+ return 0;
}
@Override
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java
index 7fd8dfeb..4c92a2a5 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.java
@@ -77,12 +77,12 @@ public DefaultCoreModuleManager(final CoreConfigure cfg,
cfg.getUserModuleLibFilesWithCache()
);
- // 初始化加载所有的模块
- try {
- reset();
- } catch (Throwable cause) {
- logger.warn("reset occur error when initializing.", cause);
- }
+// // 初始化加载所有的模块
+// try {
+// reset();
+// } catch (Throwable cause) {
+// logger.warn("reset occur error when initializing.", cause);
+// }
}
private File[] mergeFileArray(File[] aFileArray, File[] bFileArray) {
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java
index cf938031..da411a7a 100644
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.java
@@ -2,8 +2,6 @@
import com.alibaba.jvm.sandbox.api.event.Event;
import com.alibaba.jvm.sandbox.api.resource.EventMonitor;
-import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers;
-import com.alibaba.jvm.sandbox.core.util.EventPool;
/**
* 事件监控器实现
@@ -12,28 +10,25 @@ class DefaultEventMonitor implements EventMonitor {
@Override
public EventPoolInfo getEventPoolInfo() {
-
- final EventPool pool = EventListenerHandlers.getSingleton().getEventPool();
-
return new EventPoolInfo() {
@Override
public int getNumActive() {
- return pool.getNumActive();
+ return 0;
}
@Override
public int getNumActive(Event.Type type) {
- return pool.getNumActive(type);
+ return 0;
}
@Override
public int getNumIdle() {
- return pool.getNumIdle();
+ return 0;
}
@Override
public int getNumIdle(Event.Type type) {
- return pool.getNumIdle(type);
+ return 0;
}
};
}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java
index e30e1c32..1fe8c6ac 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.java
@@ -93,10 +93,6 @@ public void process() throws Throwable {
logger.info("{} is destroying", this);
httpServer.destroy();
- // 关闭对象池
- logger.info("{} is closing event-pool", this);
- EventListenerHandlers.getSingleton().getEventPool().close();
-
} catch (Throwable cause) {
logger.warn("{} unBind failed.", this, cause);
throw new IOException("unBind failed.", cause);
@@ -259,6 +255,14 @@ public void process() throws Throwable {
httpServer.start();
}
});
+
+ // 初始化加载所有的模块
+ try {
+ coreModuleManager.reset();
+ } catch (Throwable cause) {
+ logger.warn("reset occur error when initializing.", cause);
+ }
+
final InetSocketAddress local = getLocal();
logger.info("initialized server. actual bind to {}:{}", local.getHostName(), local.getPort());
} catch (Throwable cause) {
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java
index 1cf8ef57..d6b6b6d6 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.java
@@ -1,5 +1,6 @@
package com.alibaba.jvm.sandbox.core.server.jetty.servlet;
+import com.alibaba.jvm.sandbox.api.annotation.Command;
import com.alibaba.jvm.sandbox.api.http.Http;
import com.alibaba.jvm.sandbox.core.domain.CoreModule;
import com.alibaba.jvm.sandbox.core.manager.CoreModuleManager;
@@ -19,6 +20,10 @@
import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.matching;
@@ -51,7 +56,7 @@ protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws S
private void doMethod(final HttpServletRequest req,
final HttpServletResponse resp,
- final Http.Method httpMethod) throws ServletException, IOException {
+ final Http.Method expectHttpMethod) throws ServletException, IOException {
// 获取请求路径
final String path = req.getPathInfo();
@@ -75,7 +80,7 @@ private void doMethod(final HttpServletRequest req,
// 匹配对应的方法
final Method method = matchingModuleMethod(
path,
- httpMethod,
+ expectHttpMethod,
uniqueId,
coreModule.getModule().getClass()
);
@@ -173,12 +178,25 @@ private Method matchingModuleMethod(final String path,
final String uniqueId,
final Class> classOfModule) {
+ // 查找@Command注解的方法
+ for (final Method method : MethodUtils.getMethodsListWithAnnotation(classOfModule, Command.class)) {
+ final Command commandAnnotation = method.getAnnotation(Command.class);
+ if (null == commandAnnotation) {
+ continue;
+ }
+ final String pathOfCmd = "/" + uniqueId + "/" + commandAnnotation.value();
+ if (StringUtils.equals(path, pathOfCmd)) {
+ return method;
+ }
+ }
+
+ // 查找@Http注解的方法
for (final Method method : MethodUtils.getMethodsListWithAnnotation(classOfModule, Http.class)) {
final Http httpAnnotation = method.getAnnotation(Http.class);
- if(null == httpAnnotation) {
+ if (null == httpAnnotation) {
continue;
}
- final String pathPattern = "/"+uniqueId+httpAnnotation.value();
+ final String pathPattern = "/" + uniqueId + httpAnnotation.value();
if (ArrayUtils.contains(httpAnnotation.method(), httpMethod)
&& matching(path, pathPattern)) {
return method;
@@ -189,6 +207,20 @@ && matching(path, pathPattern)) {
return null;
}
+ private boolean isMapWithGenericParameterTypes(final Method method,
+ final int parameterIndex,
+ final Class> keyClass,
+ final Class> valueClass) {
+ final Type[] genericParameterTypes = method.getGenericParameterTypes();
+ if (genericParameterTypes.length < parameterIndex
+ || !(genericParameterTypes[parameterIndex] instanceof ParameterizedType)) {
+ return false;
+ }
+ final Type[] actualTypeArguments = ((ParameterizedType) genericParameterTypes[parameterIndex]).getActualTypeArguments();
+ return actualTypeArguments.length == 2
+ && keyClass.equals(actualTypeArguments[0])
+ && valueClass.equals(actualTypeArguments[1]);
+ }
/**
* 生成方法请求参数数组
@@ -201,7 +233,7 @@ && matching(path, pathPattern)) {
*/
private Object[] generateParameterObjectArray(final Method method,
final HttpServletRequest req,
- final HttpServletResponse resp) {
+ final HttpServletResponse resp) throws IOException {
final Class>[] parameterTypeArray = method.getParameterTypes();
if (ArrayUtils.isEmpty(parameterTypeArray)) {
@@ -223,6 +255,34 @@ private Object[] generateParameterObjectArray(final Method method,
continue;
}
+ // ParameterMap
+ if (Map.class.isAssignableFrom(parameterType)
+ && isMapWithGenericParameterTypes(method, index, String.class, String[].class)) {
+ parameterObjectArray[index] = req.getParameterMap();
+ }
+
+ // ParameterMap
+ else if (Map.class.isAssignableFrom(parameterType)
+ && isMapWithGenericParameterTypes(method, index, String.class, String.class)) {
+ final Map param = new HashMap();
+ for (final Map.Entry entry : req.getParameterMap().entrySet()) {
+ param.put(entry.getKey(), StringUtils.join(entry.getValue(), ","));
+ }
+ parameterObjectArray[index] = param;
+ }
+
+ // QueryString
+ else if (String.class.isAssignableFrom(parameterType)) {
+ parameterObjectArray[index] = req.getQueryString();
+ }
+
+
+ // PrintWriter
+ else if (PrintWriter.class.isAssignableFrom(parameterType)) {
+ parameterObjectArray[index] = resp.getWriter();
+ }
+
+
}
return parameterObjectArray;
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java
index 2b2c3e68..fb931a45 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.java
@@ -19,8 +19,11 @@
/**
* 构建WebSocket通讯
- * Created by luanjia@taobao.com on 2017/2/2.
+ *
+ * @author luanjia@taobao.com
+ * @deprecated 考虑废弃掉WebSocket的支持,不再维护
*/
+@Deprecated
public class WebSocketAcceptorServlet extends WebSocketServlet {
private final Logger logger = LoggerFactory.getLogger(getClass());
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java
deleted file mode 100755
index 9fc39551..00000000
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/EventPool.java
+++ /dev/null
@@ -1,446 +0,0 @@
-package com.alibaba.jvm.sandbox.core.util;
-
-import com.alibaba.jvm.sandbox.api.event.*;
-import com.alibaba.jvm.sandbox.core.CoreConfigure;
-import org.apache.commons.pool2.BaseKeyedPooledObjectFactory;
-import org.apache.commons.pool2.KeyedObjectPool;
-import org.apache.commons.pool2.PooledObject;
-import org.apache.commons.pool2.impl.DefaultPooledObject;
-import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
-import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import sun.misc.Unsafe;
-
-/**
- * 事件对象池
- *
- * @author luanjia@taobao.com
- */
-public class EventPool {
-
- private final Logger logger = LoggerFactory.getLogger(getClass());
- private final KeyedObjectPool pool;
- private final boolean isEnable;
-
- public EventPool() {
- this.pool = createEventPool();
- this.isEnable = this.pool != null;
- }
-
- /**
- * 关闭并清理对象池
- *
- * 修复问题:#108
- *
- */
- public void close() {
- if (null != pool) {
- pool.close();
- }
- }
-
- private KeyedObjectPool createEventPool() {
- final CoreConfigure cfg = CoreConfigure.getInstance();
- if (cfg.isEventPoolEnable()) {
- final GenericKeyedObjectPoolConfig poolConfig = new GenericKeyedObjectPoolConfig();
- poolConfig.setMaxTotalPerKey(cfg.getEventPoolMaxTotalPerEvent());
- poolConfig.setMinIdlePerKey(cfg.getEventPoolMinIdlePerEvent());
- poolConfig.setMaxIdlePerKey(cfg.getEventPoolMaxIdlePerEvent());
- poolConfig.setMaxTotal(cfg.getEventPoolMaxTotal());
- logger.info("enable event-pool[per-key-idle-min={};per-key-idle-max={};per-key-max={};total={};]",
- cfg.getEventPoolMinIdlePerEvent(),
- cfg.getEventPoolMaxIdlePerEvent(),
- cfg.getEventPoolMaxTotalPerEvent(),
- cfg.getEventPoolMaxTotal()
- );
- return new GenericKeyedObjectPool(new EventFactory(), poolConfig);
- } else {
- logger.info("disable event-pool.");
- return null;
- }
- }
-
- public int getNumActive() {
- return isEnable
- ? pool.getNumActive()
- : -1;
- }
-
- public int getNumActive(Event.Type type) {
- return isEnable
- ? pool.getNumActive(type)
- : -1;
- }
-
- public int getNumIdle() {
- return isEnable
- ? pool.getNumIdle()
- : -1;
- }
-
- public int getNumIdle(Event.Type type) {
- return isEnable
- ? pool.getNumIdle(type)
- : -1;
- }
-
- public BeforeEvent borrowBeforeEvent(final int processId,
- final int invokeId,
- final ClassLoader javaClassLoader,
- final String javaClassName,
- final String javaMethodName,
- final String javaMethodDesc,
- final Object target,
- final Object[] argumentArray) {
- if (isEnable) {
- try {
- final BeforeEvent event = (BeforeEvent) pool.borrowObject(Event.Type.BEFORE);
- initBeforeEvent(
- event,
- processId, invokeId,
- javaClassLoader, javaClassName, javaMethodName, javaMethodDesc,
- target, argumentArray
- );
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow BeforeEvent[processId={};invokeId={};class={};method={};] failed.",
- processId, invokeId, javaClassName, javaMethodName, cause);
- }
- }
- return new BeforeEvent(
- processId, invokeId,
- javaClassLoader, javaClassName, javaMethodName, javaMethodDesc,
- target, argumentArray
- );
- }
-
- public ReturnEvent borrowReturnEvent(final int processId,
- final int invokeId,
- final Object object) {
- if (isEnable) {
- try {
- final ReturnEvent event = (ReturnEvent) pool.borrowObject(Event.Type.RETURN);
- initReturnEvent(event, processId, invokeId, object);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow ReturnEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new ReturnEvent(processId, invokeId, object);
- }
-
- public ThrowsEvent borrowThrowsEvent(final int processId,
- final int invokeId,
- final Throwable throwable) {
- if (isEnable) {
- try {
- final ThrowsEvent event = (ThrowsEvent) pool.borrowObject(Event.Type.THROWS);
- initThrowsEvent(event, processId, invokeId, throwable);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow ThrowsEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new ThrowsEvent(processId, invokeId, throwable);
- }
-
- public LineEvent borrowLineEvent(final int processId,
- final int invokeId,
- final int lineNumber) {
- if (isEnable) {
- try {
- final LineEvent event = (LineEvent) pool.borrowObject(Event.Type.LINE);
- initLineEvent(event, processId, invokeId, lineNumber);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow LineEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new LineEvent(processId, invokeId, lineNumber);
- }
-
- public ImmediatelyReturnEvent borrowImmediatelyReturnEvent(final int processId,
- final int invokeId,
- final Object object) {
- if (isEnable) {
- try {
- final ImmediatelyReturnEvent event = (ImmediatelyReturnEvent) pool.borrowObject(Event.Type.IMMEDIATELY_RETURN);
- initReturnEvent(event, processId, invokeId, object);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow ImmediatelyReturnEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new ImmediatelyReturnEvent(processId, invokeId, object);
- }
-
- public ImmediatelyThrowsEvent borrowImmediatelyThrowsEvent(final int processId,
- final int invokeId,
- final Throwable throwable) {
- if (isEnable) {
- try {
- final ImmediatelyThrowsEvent event = (ImmediatelyThrowsEvent) pool.borrowObject(Event.Type.IMMEDIATELY_THROWS);
- initThrowsEvent(event, processId, invokeId, throwable);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow ImmediatelyThrowsEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new ImmediatelyThrowsEvent(processId, invokeId, throwable);
- }
-
- public CallBeforeEvent borrowCallBeforeEvent(final int processId,
- final int invokeId,
- final int lineNumber,
- final String owner,
- final String name,
- final String desc) {
- if (isEnable) {
- try {
- final CallBeforeEvent event = (CallBeforeEvent) pool.borrowObject(Event.Type.CALL_BEFORE);
- initCallBeforeEvent(event, processId, invokeId, lineNumber, owner, name, desc);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow CallBeforeEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new CallBeforeEvent(processId, invokeId, lineNumber, owner, name, desc);
- }
-
- public CallReturnEvent borrowCallReturnEvent(final int processId,
- final int invokeId) {
- if (isEnable) {
- try {
- final CallReturnEvent event = (CallReturnEvent) pool.borrowObject(Event.Type.CALL_RETURN);
- initCallReturnEvent(event, processId, invokeId);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow CallReturnEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new CallReturnEvent(processId, invokeId);
- }
-
- public CallThrowsEvent borrowCallThrowsEvent(final int processId,
- final int invokeId,
- final String throwException) {
- if (isEnable) {
- try {
- final CallThrowsEvent event = (CallThrowsEvent) pool.borrowObject(Event.Type.CALL_THROWS);
- initCallThrowsEvent(event, processId, invokeId, throwException);
- return event;
- } catch (Exception cause) {
- logger.warn("EventPool borrow CallThrowsEvent[processId={};invokeId={};] failed.",
- processId, invokeId, cause);
- }
- }
- return new CallThrowsEvent(processId, invokeId, throwException);
- }
-
-
- /**
- * 归还事件对象
- *
- * @param event 事件对象
- */
- public void returnEvent(Event event) {
- if (isEnable) {
- try {
- pool.returnObject(event.type, event);
- } catch (Exception cause) {
- logger.warn("EventPool return event={} failed.", event, cause);
- }
- }
- }
-
-
- private static final int ILLEGAL_PROCESS_ID = -1;
- private static final int ILLEGAL_INVOKE_ID = -1;
-
- private static final Unsafe unsafe;
- private static final long processIdFieldInInvokeEventOffset;
- private static final long invokeIdFieldInInvokeEventOffset;
- private static final long javaClassLoaderFieldInBeforeEventOffset;
- private static final long javaClassNameFieldInBeforeEventOffset;
- private static final long javaMethodNameFieldInBeforeEventOffset;
- private static final long javaMethodDescFieldInBeforeEventOffset;
- private static final long targetFieldInBeforeEventOffset;
- private static final long argumentArrayFieldInBeforeEventOffset;
- private static final long objectFieldInReturnEventOffset;
- private static final long throwableFieldInThrowsEventOffset;
- private static final long lineNumberFieldInLineEventOffset;
-
- private static final long lineNumberFieldInCallBeforeEventOffset;
- private static final long ownerFieldInCallBeforeEventOffset;
- private static final long nameFieldInCallBeforeEventOffset;
- private static final long descFieldInCallBeforeEventOffset;
- private static final long throwExceptionFieldInCallThrowsEventOffset;
-
- static {
- try {
- unsafe = UnsafeUtils.getUnsafe();
- processIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("processId"));
- invokeIdFieldInInvokeEventOffset = unsafe.objectFieldOffset(InvokeEvent.class.getDeclaredField("invokeId"));
- javaClassLoaderFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassLoader"));
- javaClassNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaClassName"));
- javaMethodNameFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodName"));
- javaMethodDescFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("javaMethodDesc"));
- targetFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("target"));
- argumentArrayFieldInBeforeEventOffset = unsafe.objectFieldOffset(BeforeEvent.class.getDeclaredField("argumentArray"));
- objectFieldInReturnEventOffset = unsafe.objectFieldOffset(ReturnEvent.class.getDeclaredField("object"));
- throwableFieldInThrowsEventOffset = unsafe.objectFieldOffset(ThrowsEvent.class.getDeclaredField("throwable"));
- lineNumberFieldInLineEventOffset = unsafe.objectFieldOffset(LineEvent.class.getDeclaredField("lineNumber"));
-
- lineNumberFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("lineNumber"));
- ownerFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("owner"));
- nameFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("name"));
- descFieldInCallBeforeEventOffset = unsafe.objectFieldOffset(CallBeforeEvent.class.getDeclaredField("desc"));
- throwExceptionFieldInCallThrowsEventOffset = unsafe.objectFieldOffset(CallThrowsEvent.class.getDeclaredField("throwException"));
- } catch (Exception e) {
- throw new Error(e);
- }
- }
-
-
- private static void initBeforeEvent(final BeforeEvent event,
- final int processId,
- final int invokeId,
- final ClassLoader javaClassLoader,
- final String javaClassName,
- final String javaMethodName,
- final String javaMethodDesc,
- final Object target,
- final Object[] argumentArray) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putObject(event, javaClassLoaderFieldInBeforeEventOffset, javaClassLoader);
- unsafe.putObject(event, javaClassNameFieldInBeforeEventOffset, javaClassName);
- unsafe.putObject(event, javaMethodNameFieldInBeforeEventOffset, javaMethodName);
- unsafe.putObject(event, javaMethodDescFieldInBeforeEventOffset, javaMethodDesc);
- unsafe.putObject(event, targetFieldInBeforeEventOffset, target);
- unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, argumentArray);
- }
-
- private static void initReturnEvent(final ReturnEvent event,
- final int processId,
- final int invokeId,
- final Object returnObj) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putObject(event, objectFieldInReturnEventOffset, returnObj);
- }
-
- private static void initThrowsEvent(final ThrowsEvent event,
- final int processId,
- final int invokeId,
- final Throwable throwable) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putObject(event, throwableFieldInThrowsEventOffset, throwable);
- }
-
- private static void initLineEvent(final LineEvent event,
- final int processId,
- final int invokeId,
- final int lineNumber) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putInt(event, lineNumberFieldInLineEventOffset, lineNumber);
- }
-
- private static void initCallBeforeEvent(final CallBeforeEvent event,
- final int processId,
- final int invokeId,
- final int lineNumber,
- final String owner,
- final String name,
- final String desc) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putInt(event, lineNumberFieldInCallBeforeEventOffset, lineNumber);
- unsafe.putObject(event, ownerFieldInCallBeforeEventOffset, owner);
- unsafe.putObject(event, nameFieldInCallBeforeEventOffset, name);
- unsafe.putObject(event, descFieldInCallBeforeEventOffset, desc);
- }
-
- private static void initCallReturnEvent(final CallReturnEvent event,
- final int processId,
- final int invokeId) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- }
-
- private static void initCallThrowsEvent(final CallThrowsEvent event,
- final int processId,
- final int invokeId,
- final String throwException) {
- unsafe.putInt(event, processIdFieldInInvokeEventOffset, processId);
- unsafe.putInt(event, invokeIdFieldInInvokeEventOffset, invokeId);
- unsafe.putObject(event, throwExceptionFieldInCallThrowsEventOffset, throwException);
- }
-
- private static class EventFactory extends BaseKeyedPooledObjectFactory {
-
- @Override
- public Event create(Event.Type type) throws Exception {
- switch (type) {
- case BEFORE:
- return new BeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null, null, null, null, null, null);
- case THROWS:
- return new ThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
- case RETURN:
- return new ReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
- case LINE:
- return new LineEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1);
- case IMMEDIATELY_RETURN:
- return new ImmediatelyReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
- case IMMEDIATELY_THROWS:
- return new ImmediatelyThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
- case CALL_BEFORE:
- return new CallBeforeEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, -1, null, null, null);
- case CALL_RETURN:
- return new CallReturnEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID);
- case CALL_THROWS:
- return new CallThrowsEvent(ILLEGAL_PROCESS_ID, ILLEGAL_INVOKE_ID, null);
- }
- throw new IllegalStateException("illegal type=" + type);
- }
-
- @Override
- public PooledObject wrap(Event event) {
- return new DefaultPooledObject(event);
- }
-
- /*
- * 这里主要是释放掉引用的大资源,比如入参、返回值、抛异常等
- * 一些不大的资源其实可以保持引用,不会轻易触发GC
- */
- @Override
- public void passivateObject(Event.Type key, PooledObject pooledObject) throws Exception {
- final Event event = pooledObject.getObject();
- switch (event.type) {
- case BEFORE:
- unsafe.putObject(event, targetFieldInBeforeEventOffset, null);
- unsafe.putObject(event, argumentArrayFieldInBeforeEventOffset, null);
- break;
- case IMMEDIATELY_THROWS:
- case THROWS:
- unsafe.putObject(event, throwableFieldInThrowsEventOffset, null);
- break;
- case IMMEDIATELY_RETURN:
- case RETURN:
- unsafe.putObject(event, objectFieldInReturnEventOffset, null);
- }
- }
-
- }
-
-}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java
index d1617804..b96d5919 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.java
@@ -1,12 +1,16 @@
package com.alibaba.jvm.sandbox.core.util;
+import com.alibaba.jvm.sandbox.api.listener.EventListener;
+import com.alibaba.jvm.sandbox.core.enhance.annotation.Interrupted;
+
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 反射工具类
- * Created by luanjia@taobao.com on 16/5/21.
+ *
+ * @author luanjia@taobao.com
*/
public class SandboxReflectUtils {
@@ -118,4 +122,14 @@ public static Class> defineClass(final ClassLoader loader,
}
+ /**
+ * 判断是否是中断式事件处理器
+ *
+ * @param listenerClass 事件监听器类型
+ * @return TRUE:中断式;FALSE:非中断式
+ */
+ public static boolean isInterruptEventHandler(final Class extends EventListener> listenerClass) {
+ return listenerClass.isAnnotationPresent(Interrupted.class);
+ }
+
}
diff --git a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java
index 9fc5fa78..31029813 100755
--- a/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java
+++ b/sandbox-core/src/main/java/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.java
@@ -54,7 +54,10 @@ private void checkForPopOrPeek() {
public E pop() {
checkForPopOrPeek();
//noinspection unchecked
- return (E) elementArray[current--];
+ final E e = (E) elementArray[current];
+ elementArray[current] = null;
+ current--;
+ return e;
}
@Override
@@ -91,4 +94,11 @@ public int deep() {
return current + 1;
}
+ public Object[] getElementArray() {
+ return elementArray;
+ }
+
+ public int getCurrent() {
+ return current;
+ }
}
diff --git a/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo b/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo
index b4a26f05..0983a78a 100644
--- a/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo
+++ b/sandbox-core/src/main/resources/com/alibaba/jvm/sandbox/logo
@@ -1,3 +1,4 @@
+
___ ____ __ ____ _ _ _ ____ ____ _____ __
| \ \ / / \/ | / ___| / \ | \ | | _ \| __ ) / _ \ \/ /
_ | |\ \ / /| |\/| |____\___ \ / _ \ | \| | | | | _ \| | | \ /
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java
index 77a6402a..f680a5ac 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.java
@@ -1,14 +1,24 @@
package com.alibaba.jvm.sandbox.qatest.core.enhance;
import com.alibaba.jvm.sandbox.api.ProcessController;
+import com.alibaba.jvm.sandbox.api.event.Event;
+import com.alibaba.jvm.sandbox.api.event.ReturnEvent;
+import com.alibaba.jvm.sandbox.api.listener.EventListener;
import com.alibaba.jvm.sandbox.api.listener.ext.Advice;
import com.alibaba.jvm.sandbox.api.listener.ext.AdviceAdapterListener;
import com.alibaba.jvm.sandbox.api.listener.ext.AdviceListener;
+import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers;
+import com.alibaba.jvm.sandbox.core.util.ObjectIDs;
import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.InterruptedAdviceAdapterListener;
import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator;
+import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper;
+import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper.Transformer;
import org.junit.Test;
+import java.util.concurrent.atomic.AtomicBoolean;
+
import static com.alibaba.jvm.sandbox.api.event.Event.Type.*;
+import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName;
import static org.junit.Assert.*;
public class AdviceTestCase extends CalculatorTestCase {
@@ -48,8 +58,8 @@ protected void afterReturning(Advice advice) throws Throwable {
@Override
protected void before(Advice advice) throws Throwable {
- assertEquals(10, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(20, ((int[])advice.getParameterArray()[0])[1]);
+ assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]);
assertTrue(advice.isProcessTop());
assertFalse(advice.isReturn());
assertFalse(advice.isThrows());
@@ -79,16 +89,17 @@ protected void afterReturning(Advice advice) throws Throwable {
@Override
protected void before(Advice advice) throws Throwable {
- assertEquals(10, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(20, ((int[])advice.getParameterArray()[0])[1]);
- advice.changeParameter(0, new int[]{40,60});
+ assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]);
+ advice.changeParameter(0, new int[]{40, 60});
}
@Override
protected void afterReturning(Advice advice) throws Throwable {
- assertEquals(40, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(60, ((int[])advice.getParameterArray()[0])[1]);
- assertEquals(100, advice.getReturnObj());;
+ assertEquals(40, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(60, ((int[]) advice.getParameterArray()[0])[1]);
+ assertEquals(100, advice.getReturnObj());
+ ;
}
}),
BEFORE, RETURN, THROWS
@@ -107,8 +118,8 @@ protected void afterReturning(Advice advice) throws Throwable {
@Override
protected void before(Advice advice) throws Throwable {
assertTrue(advice.isProcessTop());
- assertEquals(10, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(20, ((int[])advice.getParameterArray()[0])[1]);
+ assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]);
ProcessController.returnImmediately(100);
}
@@ -134,8 +145,8 @@ protected void before(Advice advice) throws Throwable {
@Override
protected void afterReturning(Advice advice) throws Throwable {
assertTrue(advice.isProcessTop());
- assertEquals(10, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(20, ((int[])advice.getParameterArray()[0])[1]);
+ assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]);
ProcessController.returnImmediately(100);
}
@@ -161,8 +172,8 @@ protected void before(Advice advice) throws Throwable {
@Override
protected void afterThrowing(Advice advice) throws Throwable {
assertTrue(advice.isProcessTop());
- assertEquals(10, ((int[])advice.getParameterArray()[0])[0]);
- assertEquals(20, ((int[])advice.getParameterArray()[0])[1]);
+ assertEquals(10, ((int[]) advice.getParameterArray()[0])[0]);
+ assertEquals(20, ((int[]) advice.getParameterArray()[0])[1]);
ProcessController.returnImmediately(100);
}
@@ -173,4 +184,91 @@ protected void afterThrowing(Advice advice) throws Throwable {
assertEquals(100, calculatorErrorSum(computerClass.newInstance(), 10, 20));
}
+ @Test
+ public void test$$advice$$sum_add$$changeThrowsOnReturn() throws Throwable {
+ final AtomicBoolean isThrowingAtSum = new AtomicBoolean(false);
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ new InterruptedAdviceAdapterListener(new AdviceListener() {
+
+ @Override
+ protected void before(Advice advice) throws Throwable {
+ if (advice.getBehavior().getName().equals("sum")) {
+ assertTrue(advice.isProcessTop());
+ } else {
+ assertFalse(advice.isProcessTop());
+ ProcessController.throwsImmediately(new IllegalStateException("TEST"));
+ }
+ }
+
+ @Override
+ protected void afterThrowing(Advice advice) throws Throwable {
+ isThrowingAtSum.set(true);
+ assertEquals("sum", advice.getBehavior().getName());
+ ProcessController.returnImmediately(100);
+ }
+ }),
+ BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ assertEquals(100, calculatorSum(calculatorClass.newInstance(), 10, 20));
+
+ }
+
+ @Test
+ public void test$$immediately$$throw_return_return() throws Throwable {
+
+ final EventListener listener1;
+ final EventListener listener2;
+ final EventListener listener3;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ new Transformer(
+ CALCULATOR_SUM_FILTER,
+ listener1 = new EventListener() {
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ ProcessController.throwsImmediately(new RuntimeException());
+ }
+ },
+ BEFORE
+ ),
+ new Transformer(
+ CALCULATOR_SUM_FILTER,
+ listener2 = new EventListener() {
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ ProcessController.returnImmediately(100);
+ }
+ },
+ THROWS
+ ),
+ new Transformer(
+ CALCULATOR_SUM_FILTER,
+ listener3 = new EventListener() {
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ final ReturnEvent returnEvent = (ReturnEvent) event;
+ ProcessController.returnImmediately(10 + (Integer) returnEvent.object);
+ }
+ },
+ RETURN
+ )
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ assertEquals(110, calculatorSum(calculatorClass.newInstance(), 10, 20));
+ EventListenerHandlers.getSingleton().checkEventProcessor(
+ ObjectIDs.instance.identity(listener1),
+ ObjectIDs.instance.identity(listener2),
+ ObjectIDs.instance.identity(listener3)
+ );
+ }
+
}
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java
index 69a577c5..c715444a 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.java
@@ -29,12 +29,21 @@ public class CalculatorTestCase extends CoreEnhanceBaseTestCase {
"^errorSum$"
);
- protected int calculatorSum(final Object calculatorObject, int... numArray) {
- return unCaughtInvokeMethod(
- unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "sum", int[].class),
- calculatorObject,
- numArray
- );
+ protected int calculatorSum(final Object calculatorObject, int... numArray) throws Throwable {
+ try {
+ return unCaughtInvokeMethod(
+ unCaughtGetClassDeclaredJavaMethod(calculatorObject.getClass(), "sum", int[].class),
+ calculatorObject,
+ numArray
+ );
+ } catch (Throwable cause) {
+ if (cause instanceof UnCaughtException
+ && (cause.getCause() instanceof InvocationTargetException)) {
+ throw ((InvocationTargetException) cause.getCause()).getTargetException();
+ }
+ throw cause;
+ }
+
}
protected int calculatorErrorSum(final Object calculatorObject, int... numArray) throws Throwable {
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java
index 42d21f1f..94084077 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.java
@@ -1,33 +1,272 @@
package com.alibaba.jvm.sandbox.qatest.core.enhance;
+import com.alibaba.jvm.sandbox.api.event.BeforeEvent;
import com.alibaba.jvm.sandbox.api.event.Event;
+import com.alibaba.jvm.sandbox.api.event.ReturnEvent;
import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener;
+import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.TracingEventListener;
import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator;
-import org.junit.Assert;
+import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper;
import org.junit.Test;
+import static com.alibaba.jvm.sandbox.api.ProcessController.throwsImmediately;
import static com.alibaba.jvm.sandbox.api.event.Event.Type.*;
+import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName;
import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.*;
+import static org.junit.Assert.assertEquals;
/**
* 测试方法调用事件流是否正确
*/
public class EventStreamTestCase extends CalculatorTestCase {
+
@Test
- public void test$$event_stream$$normal() throws Throwable {
- final EventStreamCheckerListener listener;
- final Class> computerClass = watching(
- Calculator.class,
- CALCULATOR_SUM_FILTER,
- listener = new EventStreamCheckerListener()
- .nextEventCheck(BEFORE_CHECKER)
- .nextEventCheck(RETURN_CHECKER),
- BEFORE, RETURN, THROWS
+ public void sum$return() throws Throwable {
+
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_FILTER,
+ listener = new TracingEventListener(),
+ BEFORE, RETURN, THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10));
+ listener.assertEventTracing(
+ BEFORE,
+ RETURN
);
- Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
- listener.assertIsEmpty();
+ }
+
+ @Test
+ public void sum_add$return() throws Throwable {
+
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ listener = new TracingEventListener(),
+ BEFORE, RETURN, THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ assertEquals(20, calculatorSum(calculatorClass.newInstance(), 10, 10));
+ listener.assertEventTracing(
+ BEFORE,
+ BEFORE,
+ RETURN,
+ BEFORE,
+ RETURN,
+ RETURN
+ );
+
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void sum_add$throwsImmediately_at_add_before() throws Throwable {
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ listener = new TracingEventListener() {
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ super.onEvent(event);
+ if (event.type == BEFORE) {
+ final BeforeEvent beforeEvent = (BeforeEvent) event;
+ if (beforeEvent.javaMethodName.equals("add")) {
+ throwsImmediately(new RuntimeException("TEST"));
+ }
+ }
+ }
+ },
+ BEFORE, RETURN, THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ try {
+ calculatorSum(calculatorClass.newInstance(), 10, 10);
+ } finally {
+ listener.assertEventTracing(
+ BEFORE,
+ BEFORE,
+ THROWS
+ );
+ }
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void sum_add$throwsImmediately_at_add_before$with_immediately() throws Throwable {
+
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ listener = new TracingEventListener() {
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ super.onEvent(event);
+ if (event.type == BEFORE) {
+ final BeforeEvent beforeEvent = (BeforeEvent) event;
+ if (beforeEvent.javaMethodName.equals("add")) {
+ throwsImmediately(new RuntimeException("TEST"));
+ }
+ }
+ }
+ },
+ BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ try {
+ calculatorSum(calculatorClass.newInstance(), 10, 10);
+ } finally {
+ listener.assertEventTracing(
+ BEFORE,
+ BEFORE,
+ IMMEDIATELY_THROWS,
+ THROWS
+ );
+ }
+ }
+
+
+ @Test(expected = RuntimeException.class)
+ public void sum_add$throwsImmediately_at_add_return() throws Throwable {
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ listener = new TracingEventListener() {
+
+ int firstAddInvokeId = -1;
+
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ super.onEvent(event);
+ switch (event.type) {
+ case BEFORE: {
+ final BeforeEvent beforeEvent = (BeforeEvent) event;
+ if (beforeEvent.javaMethodName.equals("add")) {
+ firstAddInvokeId = beforeEvent.invokeId;
+ }
+ break;
+ }
+ case RETURN: {
+ final ReturnEvent returnEvent = (ReturnEvent) event;
+ if (returnEvent.invokeId == firstAddInvokeId) {
+ throwsImmediately(new RuntimeException("TEST"));
+ }
+ break;
+ }
+ }
+ }
+ },
+ BEFORE, RETURN, THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ try {
+ calculatorSum(calculatorClass.newInstance(), 10, 10);
+ } finally {
+ listener.assertEventTracing(
+ BEFORE,
+ BEFORE,
+ RETURN,
+ THROWS
+ );
+ }
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void sum_add$throwsImmediately_at_add_return$with_immediately() throws Throwable {
+
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_SUM_and_ADD_FILTER,
+ listener = new TracingEventListener() {
+
+ int firstAddInvokeId = -1;
+
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ super.onEvent(event);
+ switch (event.type) {
+ case BEFORE: {
+ final BeforeEvent beforeEvent = (BeforeEvent) event;
+ if (beforeEvent.javaMethodName.equals("add")) {
+ firstAddInvokeId = beforeEvent.invokeId;
+ }
+ break;
+ }
+ case RETURN: {
+ final ReturnEvent returnEvent = (ReturnEvent) event;
+ if (returnEvent.invokeId == firstAddInvokeId) {
+ throwsImmediately(new RuntimeException("TEST"));
+ }
+ break;
+ }
+ }
+ }
+
+ },
+ BEFORE, RETURN, THROWS, IMMEDIATELY_RETURN, IMMEDIATELY_THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ try {
+ calculatorSum(calculatorClass.newInstance(), 10, 10);
+ } finally {
+ listener.assertEventTracing(
+ BEFORE,
+ BEFORE,
+ RETURN,
+ IMMEDIATELY_THROWS,
+ THROWS
+ );
+ }
+ }
+
+
+ @Test(expected = Exception.class)
+ public void sum$throws() throws Throwable {
+
+ final TracingEventListener listener;
+ final Class> calculatorClass = JvmHelper
+ .createJvm()
+ .defineClass(
+ Calculator.class,
+ CALCULATOR_ERROR_SUM_FILTER,
+ listener = new TracingEventListener(),
+ BEFORE, RETURN, THROWS
+ )
+ .loadClass(getJavaClassName(Calculator.class));
+
+ try {
+ calculatorErrorSum(calculatorClass.newInstance(), 10, 10);
+ } finally {
+ listener.assertEventTracing(
+ BEFORE,
+ THROWS
+ );
+ }
+
}
@@ -47,7 +286,7 @@ public class EventStreamTestCase extends CalculatorTestCase {
BEFORE, RETURN, THROWS, CALL_BEFORE, CALL_RETURN, CALL_THROWS
);
- Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
+ assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
listener.assertIsEmpty();
}
@@ -70,7 +309,7 @@ public class EventStreamTestCase extends CalculatorTestCase {
BEFORE, RETURN, THROWS, LINE
);
- Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
+ assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
listener.assertIsEmpty();
}
@@ -97,7 +336,7 @@ public class EventStreamTestCase extends CalculatorTestCase {
Event.Type.values()
);
- Assert.assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
+ assertEquals(2, calculatorSum(computerClass.newInstance(), 1, 1));
listener.assertIsEmpty();
}
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java
index 7c1aea30..feeb38a0 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.java
@@ -1,12 +1,15 @@
package com.alibaba.jvm.sandbox.qatest.core.enhance;
import com.alibaba.jvm.sandbox.api.event.*;
+import com.alibaba.jvm.sandbox.api.listener.EventListener;
import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener;
import com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventChecker;
import com.alibaba.jvm.sandbox.qatest.core.enhance.target.Calculator;
+import com.alibaba.jvm.sandbox.qatest.core.util.JvmHelper;
import org.junit.Test;
import static com.alibaba.jvm.sandbox.api.event.Event.Type.*;
+import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName;
import static com.alibaba.jvm.sandbox.qatest.core.enhance.listener.EventStreamCheckerListener.EventTypeChecker.CALL_RETURN_CHECKER;
import static org.junit.Assert.*;
@@ -18,7 +21,7 @@ public class EventTestCase extends CalculatorTestCase {
@Test
public void test$$event$$before() throws Throwable {
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_SUM_FILTER,
listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() {
@@ -37,14 +40,14 @@ public void onCheck(BeforeEvent event) {
}),
BEFORE
);
- assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20));
+ assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20));
listener.assertIsEmpty();
}
@Test
public void test$$event$$return() throws Throwable {
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_SUM_FILTER,
listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() {
@@ -56,7 +59,7 @@ public void onCheck(ReturnEvent event) {
}),
RETURN
);
- assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20));
+ assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20));
listener.assertIsEmpty();
}
@@ -64,7 +67,7 @@ public void onCheck(ReturnEvent event) {
@Test(expected = RuntimeException.class)
public void test$$event$$throws() throws Throwable {
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_ERROR_SUM_FILTER,
listener = new EventStreamCheckerListener().nextEventCheck(new EventChecker() {
@@ -77,12 +80,12 @@ public void onCheck(ThrowsEvent event) {
}),
THROWS
);
- assertCalculatorErrorSum(listener, computerClass);
+ assertCalculatorErrorSum(listener, calculatorClass);
}
- private void assertCalculatorErrorSum(EventStreamCheckerListener listener, Class> computerClass) throws Throwable {
+ private void assertCalculatorErrorSum(EventStreamCheckerListener listener, Class> calculatorClass) throws Throwable {
try {
- calculatorErrorSum(computerClass.newInstance(), 10, 20);
+ calculatorErrorSum(calculatorClass.newInstance(), 10, 20);
assertFalse("must throw exception", true);
} catch (RuntimeException cause) {
assertEquals("THIS IS A TEST!", cause.getMessage());
@@ -106,7 +109,7 @@ public void onCheck(CallBeforeEvent event) {
};
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_SUM_FILTER,
listener = new EventStreamCheckerListener()
@@ -114,14 +117,14 @@ public void onCheck(CallBeforeEvent event) {
.nextEventCheck(callBeforeEventEventChecker),
CALL_BEFORE
);
- assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20));
+ assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20));
listener.assertIsEmpty();
}
@Test
public void test$$event$$call_return() throws Throwable {
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_SUM_FILTER,
listener = new EventStreamCheckerListener()
@@ -129,7 +132,7 @@ public void onCheck(CallBeforeEvent event) {
.nextEventCheck(CALL_RETURN_CHECKER),
CALL_RETURN
);
- assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20));
+ assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20));
listener.assertIsEmpty();
}
@@ -144,14 +147,14 @@ public void onCheck(CallThrowsEvent event) {
};
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_ERROR_SUM_FILTER,
listener = new EventStreamCheckerListener()
.nextEventCheck(callThrowsEventEventChecker),
CALL_THROWS
);
- assertCalculatorErrorSum(listener, computerClass);
+ assertCalculatorErrorSum(listener, calculatorClass);
}
@@ -173,7 +176,7 @@ public void onCheck(LineEvent event) {
@Test
public void test$$event$$line() throws Throwable {
EventStreamCheckerListener listener;
- final Class> computerClass = watching(
+ final Class> calculatorClass = watching(
Calculator.class,
CALCULATOR_SUM_FILTER,
listener = new EventStreamCheckerListener()
@@ -187,7 +190,7 @@ public void onCheck(LineEvent event) {
,
LINE
);
- assertEquals(30, calculatorSum(computerClass.newInstance(), 10, 20));
+ assertEquals(30, calculatorSum(calculatorClass.newInstance(), 10, 20));
listener.assertIsEmpty();
}
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java
new file mode 100644
index 00000000..3c631e59
--- /dev/null
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/TracingEventListener.java
@@ -0,0 +1,63 @@
+package com.alibaba.jvm.sandbox.qatest.core.enhance.listener;
+
+import com.alibaba.jvm.sandbox.api.event.BeforeEvent;
+import com.alibaba.jvm.sandbox.api.event.Event;
+import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers;
+import com.alibaba.jvm.sandbox.core.util.ObjectIDs;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.commons.lang3.ArrayUtils.getLength;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * 事件跟踪监听器
+ */
+public class TracingEventListener extends InterruptedEventListener {
+
+ private final List eventTracing = new ArrayList();
+
+ @Override
+ public void onEvent(Event event) throws Throwable {
+ eventTracing.add(event.type);
+ }
+
+ /**
+ * 获取跟踪信息
+ *
+ * @return 跟踪信息
+ */
+ public List getEventTracing() {
+ return eventTracing;
+ }
+
+ /**
+ * 断言跟踪信息
+ *
+ * @param exceptEventTypes 期待的事件类型
+ */
+ public void assertEventTracing(final Event.Type... exceptEventTypes) {
+ assertEventProcessor();
+ assertArrayEquals(
+ exceptEventTypes,
+ getEventTracing().toArray(new Event.Type[]{})
+ );
+ }
+
+ // 检查内核事件处理器是否正确
+ private void assertEventProcessor() {
+ EventListenerHandlers
+ .getSingleton()
+ .checkEventProcessor(ObjectIDs.instance.identity(this));
+ }
+
+ private void assertArrayEquals(E[] exceptArray, E[] actualArray) {
+ assertEquals("except size not matched!", getLength(exceptArray), getLength(actualArray));
+ for (int index = 0; index < exceptArray.length; index++) {
+ assertEquals("[" + index + "] not matched", exceptArray[index], actualArray[index]);
+ }
+ }
+
+
+}
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java
index c4213683..bf409d17 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.java
@@ -281,6 +281,7 @@ public boolean onFire(CoreModule coreModule, Event event) {
moduleLifeCycleEventBus,
new EmptyProviderManager()
);
+ coreModuleManager.reset();
// 刚完成初始化,注册好的事件应该消化完成
@@ -328,7 +329,7 @@ public boolean onFire(CoreModule coreModule, Event event) {
}
@Test
- public void test$$CoreModuleManager$$loading() throws IOException {
+ public void test$$CoreModuleManager$$loading() throws IOException, ModuleException {
final File moduleJarFile = buildingModuleJarFileWithModuleClass(
createTempFile("test-", ".jar"),
@@ -350,6 +351,7 @@ public boolean onFire(CoreModule coreModule, Event event) {
new DefaultModuleLifeCycleEventBus(),
new EmptyProviderManager()
);
+ coreModuleManager.reset();
final Set uniqueIds = new LinkedHashSet();
for (final CoreModule coreModule : coreModuleManager.list()) {
@@ -400,6 +402,7 @@ public static class ModifyAnotherNormalModule implements Module {
new DefaultModuleLifeCycleEventBus(),
new EmptyProviderManager()
);
+ coreModuleManager.reset();
final Set uniqueIds = new LinkedHashSet();
for (final CoreModule coreModule : coreModuleManager.list()) {
@@ -441,6 +444,7 @@ public static class ModifyAnotherNormalModule implements Module {
new DefaultModuleLifeCycleEventBus(),
new EmptyProviderManager()
);
+ coreModuleManager.reset();
final Set uniqueIds = new LinkedHashSet();
for (final CoreModule coreModule : coreModuleManager.list()) {
@@ -483,6 +487,7 @@ public static class ModifyAnotherNormalModule implements Module {
new DefaultModuleLifeCycleEventBus(),
new EmptyProviderManager()
);
+ coreModuleManager.reset();
{
final Set uniqueIds = new LinkedHashSet();
@@ -542,6 +547,7 @@ public static class ModifyAnotherNormalModule implements Module {
new DefaultModuleLifeCycleEventBus(),
new EmptyProviderManager()
);
+ coreModuleManager.reset();
coreModuleManager.getThrowsExceptionIfNull("not-existed-module");
}
@@ -583,6 +589,7 @@ public boolean onFire(CoreModule coreModule, Event event) {
moduleLifeCycleEventBus,
new EmptyProviderManager()
);
+ coreModuleManager.reset();
final CoreModule normalNoLazyActiveCoreModule = coreModuleManager
.getThrowsExceptionIfNull("normal-no-lazy-active-module");
@@ -638,6 +645,7 @@ public boolean onFire(CoreModule coreModule, Event event) {
moduleLifeCycleEventBus,
new EmptyProviderManager()
);
+ coreModuleManager.reset();
final CoreModule brokenOnLazyActiveCoreModule = coreModuleManager
.getThrowsExceptionIfNull("broken-on-lazy-active");
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java
new file mode 100644
index 00000000..0846a0ee
--- /dev/null
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/JvmHelper.java
@@ -0,0 +1,210 @@
+package com.alibaba.jvm.sandbox.qatest.core.util;
+
+import com.alibaba.jvm.sandbox.api.event.Event;
+import com.alibaba.jvm.sandbox.api.filter.Filter;
+import com.alibaba.jvm.sandbox.api.listener.EventListener;
+import com.alibaba.jvm.sandbox.core.enhance.EventEnhancer;
+import com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandlers;
+import com.alibaba.jvm.sandbox.core.util.ObjectIDs;
+import com.alibaba.jvm.sandbox.core.util.SandboxReflectUtils;
+import com.alibaba.jvm.sandbox.core.util.matcher.ExtFilterMatcher;
+import com.alibaba.jvm.sandbox.core.util.matcher.MatchingResult;
+import com.alibaba.jvm.sandbox.core.util.matcher.structure.ClassStructureFactory;
+import org.apache.commons.lang3.StringUtils;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Set;
+
+import static com.alibaba.jvm.sandbox.api.filter.ExtFilter.ExtFilterFactory.make;
+import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.getJavaClassName;
+import static com.alibaba.jvm.sandbox.core.CoreConfigure.toConfigure;
+import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toByteArray;
+import static com.alibaba.jvm.sandbox.qatest.core.util.QaClassUtils.toResourceName;
+
+/**
+ * JVM帮助类,能模拟一个JVM对类的管理行为
+ */
+public class JvmHelper {
+
+ private final String namespace;
+ private final PrivateClassLoader classLoader
+ = new PrivateClassLoader();
+
+ public JvmHelper(final String namespace) {
+ this.namespace = namespace;
+ toConfigure(String.format(";namespace=%s;", namespace), "");
+ }
+
+ public JvmHelper defineClass(final Class> clazz) throws IOException, InvocationTargetException, IllegalAccessException {
+ return defineClass(
+ getJavaClassName(clazz),
+ toByteArray(clazz)
+ );
+ }
+
+ public JvmHelper defineClass(final String javaClassName,
+ final byte[] byteCodeArray) throws InvocationTargetException, IllegalAccessException {
+ classLoader.defineClass(javaClassName, byteCodeArray);
+ return this;
+ }
+
+ public static class Transformer {
+
+ private final Filter filter;
+ private final EventListener listener;
+ private final Event.Type[] eventTypes;
+
+ public Transformer(final Filter filter,
+ final EventListener listener,
+ final Event.Type... eventTypes) {
+ this.filter = filter;
+ this.listener = listener;
+ this.eventTypes = eventTypes;
+ }
+
+ public byte[] transform(final String namespace,
+ final ClassLoader loader,
+ final byte[] byteCodes) {
+
+ final MatchingResult matchingResult = new ExtFilterMatcher(make(filter))
+ .matching(ClassStructureFactory.createClassStructure(byteCodes, loader));
+
+ final int listenerId = ObjectIDs.instance.identity(listener);
+ EventListenerHandlers.getSingleton().active(
+ listenerId,
+ listener,
+ eventTypes
+ );
+
+ if (matchingResult.isMatched()) {
+ return new EventEnhancer().toByteCodeArray(
+ loader,
+ byteCodes,
+ matchingResult.getBehaviorSignCodes(),
+ namespace,
+ listenerId,
+ eventTypes
+ );
+ } else {
+ return byteCodes;
+ }
+ }
+
+ }
+
+ public JvmHelper defineClass(final Class> clazz,
+ final Filter filter,
+ final EventListener listener,
+ final Event.Type... eventType) throws IllegalAccessException, IOException, InvocationTargetException {
+ return defineClass(new Class>[]{clazz}, filter, listener, eventType);
+ }
+
+ public JvmHelper defineClass(final Class>[] classes,
+ final Filter filter,
+ final EventListener listener,
+ final Event.Type... eventTypes) throws IllegalAccessException, IOException, InvocationTargetException {
+ return defineClass(
+ classes,
+ new Transformer(filter, listener, eventTypes)
+ );
+ }
+
+ public JvmHelper defineClass(final Class> clazz,
+ final Transformer... transformers) throws IOException, InvocationTargetException, IllegalAccessException {
+ return defineClass(new Class>[]{clazz}, transformers);
+ }
+
+ public JvmHelper defineClass(final Class>[] classes,
+ final Transformer... transformers) throws IOException, InvocationTargetException, IllegalAccessException {
+ for (final Class> clazz : classes) {
+ final String javaClassName = getJavaClassName(clazz);
+ byte[] byteCodes = toByteArray(clazz);
+ for (final Transformer transformer : transformers) {
+ byteCodes = transformer.transform(namespace, classLoader, byteCodes);
+ }
+ defineClass(javaClassName, byteCodes);
+ }
+ return this;
+ }
+
+ public Class> loadClass(String javaClassName) throws ClassNotFoundException {
+ return classLoader.loadClass(javaClassName);
+ }
+
+
+ /**
+ * 私有的ClassLoader
+ */
+ class PrivateClassLoader extends ClassLoader {
+
+ private final Map javaClassByteArrayMap
+ = new HashMap();
+
+ private final Set> classes = new LinkedHashSet>();
+
+ public PrivateClassLoader() {
+ }
+
+ public PrivateClassLoader(ClassLoader parent) {
+ super(parent);
+ }
+
+ @Override
+ protected Class> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+
+ for (final Class> clazz : classes) {
+ if (StringUtils.equals(name, getJavaClassName(clazz))) {
+ return clazz;
+ }
+ }
+
+ final Class> loadedClass = findLoadedClass(name);
+ if (loadedClass == null) {
+ try {
+ final Class> aClass = findClass(name);
+ if (resolve) {
+ resolveClass(aClass);
+ }
+ return aClass;
+ } catch (Exception e) {
+ return super.loadClass(name, resolve);
+ }
+ } else {
+ return loadedClass;
+ }
+ }
+
+ public Class> defineClass(final String javaClassName,
+ final byte[] classByteArray) throws InvocationTargetException, IllegalAccessException {
+ javaClassByteArrayMap.put(toResourceName(javaClassName), classByteArray);
+ final Class> clazz = SandboxReflectUtils.defineClass(this, javaClassName, classByteArray);
+ classes.add(clazz);
+ return clazz;
+ }
+
+ @Override
+ public InputStream getResourceAsStream(String name) {
+ if (javaClassByteArrayMap.containsKey(name)) {
+ return new ByteArrayInputStream(javaClassByteArrayMap.get(name));
+ }
+ return super.getResourceAsStream(name);
+ }
+
+ }
+
+
+ public static JvmHelper createJvm(final String namespace) {
+ return new JvmHelper(StringUtils.isBlank(namespace) ? "default" : namespace);
+ }
+
+ public static JvmHelper createJvm() {
+ return createJvm("default");
+ }
+
+}
diff --git a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java
index 076e06df..ae52562c 100644
--- a/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java
+++ b/sandbox-core/src/test/java/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.java
@@ -33,78 +33,4 @@ public static String toResourceName(String javaClassName) {
return toInternalClassName(javaClassName).concat(".class");
}
- public static Set> getJdkFamilySuperClasses(Class> clazz) {
- final Set> familySuperClasses = new LinkedHashSet>();
- for (Class> superClass = clazz.getSuperclass();
- superClass != null;
- superClass = superClass.getSuperclass()) {
- familySuperClasses.add(superClass);
- }
- return familySuperClasses;
- }
-
- public static Set> getJdkClassInterfaces(Class> clazz) {
- final Set> interfaceClasses = new LinkedHashSet>();
- if (ArrayUtils.isNotEmpty(clazz.getInterfaces())) {
- for (Class> interfaceClass : clazz.getInterfaces()) {
- interfaceClasses.add(interfaceClass);
- interfaceClasses.addAll(getJdkFamilySuperClasses(interfaceClass));
- }
- }
- return interfaceClasses;
- }
-
- public static Set> getJdkFamilyClassInterface(Class> clazz) {
- final Set> familyInterfaceClasses = new LinkedHashSet>();
- for (final Class> interfaceClass : getJdkClassInterfaces(clazz)) {
- familyInterfaceClasses.add(interfaceClass);
- familyInterfaceClasses.addAll(getJdkClassInterfaces(interfaceClass));
- }
- return familyInterfaceClasses;
- }
-
- /**
- * 获取类的所有类型
- *
- *
所有父类
- * 所有父类的接口及这些接口的所有父类
- * 所有接口的父类
- *
- *
- * @param clazz
- * @return
- */
- public static Set> getJdkFamilyClassType(Class> clazz) {
-
- // 获取所有的父类
- final Set> familyTypes = new LinkedHashSet>(getJdkFamilyClassInterface(clazz));
-
- for (final Class> superClass : getJdkFamilySuperClasses(clazz)) {
- familyTypes.add(superClass);
- familyTypes.addAll(getJdkFamilyClassInterface(superClass));
- }
-
- // 递归获取所有接口及其父类
- return familyTypes;
- }
-
- public static Set> getJdkAnnotationType(Class> clazz) {
- final Set> annotationClasses = new LinkedHashSet>();
- if(ArrayUtils.isNotEmpty(clazz.getAnnotations())) {
- for (final Annotation annotation : clazz.getAnnotations()) {
- if (annotation.getClass().isAnnotation()) {
- annotationClasses.add(annotation.getClass());
- }
- for (final Class annotationInterfaceClass : annotation.getClass().getInterfaces()) {
- if (annotationInterfaceClass.isAnnotation()) {
- annotationClasses.add(annotationInterfaceClass);
- }
- }
- }
- }
- return annotationClasses;
- }
-
-
-
}
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class
deleted file mode 100644
index 463b1561..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreConfigure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class
deleted file mode 100644
index 89eb9271..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/CoreLauncher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class
deleted file mode 100644
index 8381dab9..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ModuleClassLoader.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ProviderClassLoader.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ProviderClassLoader.class
deleted file mode 100644
index abd7b8d4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/ProviderClassLoader.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader$Routing.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader$Routing.class
deleted file mode 100644
index 66c5a018..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader$Routing.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader.class
deleted file mode 100644
index 5f3ae96d..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/classloader/RoutingURLClassLoader.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/domain/CoreModule.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/domain/CoreModule.class
deleted file mode 100644
index 1c212b78..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/domain/CoreModule.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class
deleted file mode 100644
index 2fecd266..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/Enhancer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class
deleted file mode 100644
index dfc9bee3..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class
deleted file mode 100644
index a03507bd..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/EventEnhancer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.class
deleted file mode 100644
index 98f82622..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/annotation/Interrupted.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class
deleted file mode 100644
index 2257ca5c..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock$Block.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class
deleted file mode 100644
index a16495c4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/CodeLock.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$1.class
deleted file mode 100644
index 63326a50..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class
deleted file mode 100644
index c72e30df..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$EventProcess.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$EventProcess.class
deleted file mode 100644
index 384a1fc7..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap$EventProcess.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap.class
deleted file mode 100644
index 015ef721..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$EventListenerWrap.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$InterruptedEventListenerImpl.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$InterruptedEventListenerImpl.class
deleted file mode 100644
index c70ce1e1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers$InterruptedEventListenerImpl.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class
deleted file mode 100644
index 0d019495..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/EventListenerHandlers.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class
deleted file mode 100644
index 43225d9d..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class
deleted file mode 100644
index db3364f0..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$Step.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$Step.class
deleted file mode 100644
index d59ceac0..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener$Step.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.class
deleted file mode 100644
index 498c3e4e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/SeparateImmediatelyEventListener.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class
deleted file mode 100644
index d0a0a949..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmCodeLock.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class
deleted file mode 100644
index fab7d391..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods$InnerHelper.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods.class
deleted file mode 100644
index 00c1134f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmMethods.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class
deleted file mode 100644
index 381f8633..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTryCatchBlock.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTypes.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTypes.class
deleted file mode 100644
index 0e6759e0..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/AsmTypes.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class
deleted file mode 100644
index 9bd70eb8..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/CallAsmCodeLock.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class
deleted file mode 100644
index 25812785..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class
deleted file mode 100644
index 3594c4eb..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class
deleted file mode 100644
index 99780efb..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$3.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$4.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$4.class
deleted file mode 100644
index 628ca7ce..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$4.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class
deleted file mode 100644
index da6152c1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$5.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class
deleted file mode 100644
index 2fb3c0c8..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$6.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$7.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$7.class
deleted file mode 100644
index c50cce99..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$7.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class
deleted file mode 100644
index a2c55400..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1$8.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1.class
deleted file mode 100644
index 9f4b98c8..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class
deleted file mode 100644
index 3108e02e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/EventWeaver.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class
deleted file mode 100644
index fd7202c4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/enhance/weaver/asm/ReWriteMethod.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.class
deleted file mode 100644
index f0aaedd5..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreLoadedClassDataSource.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.class
deleted file mode 100644
index 10cc5046..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/CoreModuleManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$Event.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$Event.class
deleted file mode 100644
index c1ff0605..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$Event.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class
deleted file mode 100644
index a9f8bc28..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus$ModuleLifeCycleEventListener.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class
deleted file mode 100644
index 801aa88c..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleLifeCycleEventBus.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager$WeakResource.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager$WeakResource.class
deleted file mode 100644
index a26b6f5c..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager$WeakResource.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class
deleted file mode 100644
index ffa0e6e4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ModuleResourceManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ProviderManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ProviderManager.class
deleted file mode 100644
index 92dc8bf8..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/ProviderManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class
deleted file mode 100644
index 7f27c093..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/AffectStatistic.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.class
deleted file mode 100644
index 74d7955e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultConfigInfo.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class
deleted file mode 100644
index b9845f24..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleJarLoadCallback.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleJarLoadCallback.class
deleted file mode 100644
index 3d6bac0e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleJarLoadCallback.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleLoadCallback.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleLoadCallback.class
deleted file mode 100644
index d0cfd9d2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager$InnerModuleLoadCallback.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class
deleted file mode 100644
index 0998b2aa..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultCoreModuleManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor$1.class
deleted file mode 100644
index 2e40047d..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.class
deleted file mode 100644
index 8ce1d806..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultEventMonitor.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class
deleted file mode 100644
index 71173e5f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class
deleted file mode 100644
index dd8258d5..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultLoadedClassDataSource.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.class
deleted file mode 100644
index 1a7f81ad..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleController.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.class
deleted file mode 100644
index abf46b44..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleEventWatcher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.class
deleted file mode 100644
index 98ce0e38..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleLifeCycleEventBus.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class
deleted file mode 100644
index 2cc9f91c..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.class
deleted file mode 100644
index 4a0a7ebc..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultModuleResourceManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.class
deleted file mode 100644
index afc6ec49..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/DefaultProviderManager.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class
deleted file mode 100644
index d148e382..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleJarLoadCallback.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleLoadCallback.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleLoadCallback.class
deleted file mode 100644
index e38cb161..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader$ModuleLoadCallback.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.class
deleted file mode 100644
index 0c3a6c1e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/ModuleJarLoader.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class
deleted file mode 100644
index 2759fe6a..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/manager/impl/SandboxClassFileTransformer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class
deleted file mode 100644
index b6f639a5..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/CoreServer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/ProxyCoreServer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/ProxyCoreServer.class
deleted file mode 100644
index 59e13fb6..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/ProxyCoreServer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class
deleted file mode 100644
index a40b7ba0..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class
deleted file mode 100644
index 1b421828..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class
deleted file mode 100644
index ce3fe053..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/JettyCoreServer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class
deleted file mode 100644
index 8675497e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.class
deleted file mode 100644
index 5a063241..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/ModuleHttpServlet.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerOnTextMessage.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerOnTextMessage.class
deleted file mode 100644
index 4495b9ff..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerOnTextMessage.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class
deleted file mode 100644
index fd6a4a8f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class
deleted file mode 100644
index ef4fffa4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$InnerWebSocket.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$WebSocketConnectionResource.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$WebSocketConnectionResource.class
deleted file mode 100644
index 7e5a4107..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet$WebSocketConnectionResource.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.class
deleted file mode 100644
index dd3eecb2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/server/jetty/servlet/WebSocketAcceptorServlet.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class
deleted file mode 100644
index e8fb4cf7..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/BitUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class
deleted file mode 100644
index 21fd5c71..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class
deleted file mode 100644
index f27b42d4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool$EventFactory.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class
deleted file mode 100644
index a180b919..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/EventPool.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class
deleted file mode 100644
index b19ed272..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ExceptionUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$1.class
deleted file mode 100644
index 1147cee1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class
deleted file mode 100644
index 4c5f26b2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_DECODE_STATE.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_SPLIT_STATE.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_SPLIT_STATE.class
deleted file mode 100644
index aed382d6..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec$ESCAPE_SPLIT_STATE.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class
deleted file mode 100644
index 9d80041f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/FeatureCodec.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$Processor.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$Processor.class
deleted file mode 100644
index e135c205..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$Processor.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class
deleted file mode 100644
index bf8fb302..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer$State.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer.class
deleted file mode 100644
index 83fe8868..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Initializer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/LazyGet.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/LazyGet.class
deleted file mode 100644
index 5b2e969f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/LazyGet.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class
deleted file mode 100644
index 98ff4bb7..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NamespaceConvert.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class
deleted file mode 100644
index 35720fb1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/NetworkUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$1.class
deleted file mode 100644
index 192f09af..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$IdentityWeakReference.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$IdentityWeakReference.class
deleted file mode 100644
index 6faac2a1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs$IdentityWeakReference.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs.class
deleted file mode 100644
index 389ef595..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/ObjectIDs.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.class
deleted file mode 100644
index 9a8d09a2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxReflectUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.class
deleted file mode 100644
index 63b5f970..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SandboxStringUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class
deleted file mode 100644
index aa2b4c69..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/Sequencer.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class
deleted file mode 100644
index 1ce92dcc..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/SpyUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class
deleted file mode 100644
index b5d2b137..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnCaughtException.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class
deleted file mode 100644
index 136956c0..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/UnsafeUtils.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaLRUCache.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaLRUCache.class
deleted file mode 100644
index ebb75d2e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaLRUCache.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaStack.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaStack.class
deleted file mode 100644
index 7da0d551..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/GaStack.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/Pair.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/Pair.class
deleted file mode 100644
index a0a56801..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/Pair.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.class
deleted file mode 100644
index b01fd11a..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/collection/ThreadUnsafeGaStack.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class
deleted file mode 100644
index b554e5e2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/ExtFilterMatcher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$1.class
deleted file mode 100644
index 69c2409a..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class
deleted file mode 100644
index a2c1d309..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$And.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$Or.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$Or.class
deleted file mode 100644
index 79642e45..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher$Or.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher.class
deleted file mode 100644
index 7ca2a63a..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/GroupMatcher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class
deleted file mode 100644
index 57265004..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/Matcher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/MatchingResult.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/MatchingResult.class
deleted file mode 100644
index 31845053..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/MatchingResult.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/UnsupportedMatcher.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/UnsupportedMatcher.class
deleted file mode 100644
index d2669383..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/UnsupportedMatcher.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class
deleted file mode 100644
index 913e2657..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/Access.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class
deleted file mode 100644
index 7bacf442..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByAsm.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class
deleted file mode 100644
index abc325d3..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKBehavior.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class
deleted file mode 100644
index 0d31afb2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/AccessImplByJDKClass.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class
deleted file mode 100644
index 2701bcea..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ArrayClassStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$1.class
deleted file mode 100644
index bd78b6a9..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$2.class
deleted file mode 100644
index 6d7813e2..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure.class
deleted file mode 100644
index 7fa20c52..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/BehaviorStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructure.class
deleted file mode 100644
index dc7f1a5b..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class
deleted file mode 100644
index 35280ab1..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureFactory.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class
deleted file mode 100644
index b3124e8d..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$2.class
deleted file mode 100644
index 69cb4033..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$3.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$3.class
deleted file mode 100644
index c471a2ba..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$3.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class
deleted file mode 100644
index 943249a4..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4.class
deleted file mode 100644
index b2f4389e..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$4.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class
deleted file mode 100644
index 828f7320..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class
deleted file mode 100644
index c308041f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class
deleted file mode 100644
index cfd550b9..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm$5.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class
deleted file mode 100644
index 66428be7..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByAsm.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class
deleted file mode 100644
index 1d60a17f..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class
deleted file mode 100644
index c76da054..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class
deleted file mode 100644
index fa9a0519..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ClassStructureImplByJDK.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class
deleted file mode 100644
index a434e059..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/EmptyClassStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class
deleted file mode 100644
index 9dbef045..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$1.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class
deleted file mode 100644
index d0d7e06c..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$2.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class
deleted file mode 100644
index b3af529b..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$3.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class
deleted file mode 100644
index a2e911ed..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure$4.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class
deleted file mode 100644
index caf93490..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/FamilyClassStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/MemberStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/MemberStructure.class
deleted file mode 100644
index b265321b..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/MemberStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class
deleted file mode 100644
index 5a1718f7..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/ModifierAccess.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class
deleted file mode 100644
index 45319747..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure$Primitive.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure.class b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure.class
deleted file mode 100644
index 54dcbeea..00000000
Binary files a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/core/util/matcher/structure/PrimitiveClassStructure.class and /dev/null differ
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo
deleted file mode 100644
index b4a26f05..00000000
--- a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/logo
+++ /dev/null
@@ -1,5 +0,0 @@
- ___ ____ __ ____ _ _ _ ____ ____ _____ __
- | \ \ / / \/ | / ___| / \ | \ | | _ \| __ ) / _ \ \/ /
- _ | |\ \ / /| |\/| |____\___ \ / _ \ | \| | | | | _ \| | | \ /
-| |_| | \ V / | | | |_____|__) / ___ \| |\ | |_| | |_) | |_| / \
- \___/ \_/ |_| |_| |____/_/ \_\_| \_|____/|____/ \___/_/\_\
\ No newline at end of file
diff --git a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version b/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version
deleted file mode 100644
index 4fb5f668..00000000
--- a/sandbox-core/target/classes/com/alibaba/jvm/sandbox/version
+++ /dev/null
@@ -1 +0,0 @@
-1.1.2-SNAPSHOT
\ No newline at end of file
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class
deleted file mode 100644
index 18a806b8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class
deleted file mode 100644
index ad4bb361..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$3.class
deleted file mode 100644
index a1402599..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$3.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$4.class
deleted file mode 100644
index c8b3529f..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$4.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class
deleted file mode 100644
index 4d55745d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$5.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$6.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$6.class
deleted file mode 100644
index d77cdb57..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase$6.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.class
deleted file mode 100644
index b937943b..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/AdviceTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.class
deleted file mode 100644
index 3584cb7c..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CalculatorTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$1.class
deleted file mode 100644
index 822f5ba2..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class
deleted file mode 100644
index 3fd09036..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase$TestClassLoader.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class
deleted file mode 100644
index 8ed0a159..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/CoreEnhanceBaseTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class
deleted file mode 100644
index 4001e370..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class
deleted file mode 100644
index 0ed16c24..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$3.class
deleted file mode 100644
index b3c2b375..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$3.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$4.class
deleted file mode 100644
index 78938815..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase$4.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class
deleted file mode 100644
index 8758ca50..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStackTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class
deleted file mode 100644
index 9690db2b..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventStreamTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$1.class
deleted file mode 100644
index 7a371077..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class
deleted file mode 100644
index 68d1eeb3..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$3.class
deleted file mode 100644
index 48c2ddee..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$3.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class
deleted file mode 100644
index a14ad9db..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$4.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$5.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$5.class
deleted file mode 100644
index 8bc58815..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$5.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$LineEventChecker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$LineEventChecker.class
deleted file mode 100644
index 5f949f9a..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase$LineEventChecker.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class
deleted file mode 100644
index f9328b93..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/EventTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class
deleted file mode 100644
index 26854043..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class
deleted file mode 100644
index c41ce4e0..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class
deleted file mode 100644
index 22da2da8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/NamespaceTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class
deleted file mode 100644
index e0043382..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$2.class
deleted file mode 100644
index 4b5d8877..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class
deleted file mode 100644
index 2b16143e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$3.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class
deleted file mode 100644
index feeb2b4e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase$4.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class
deleted file mode 100644
index 28ca99a4..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/ProcessControllerTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventChecker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventChecker.class
deleted file mode 100644
index ffeb0fb1..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventChecker.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class
deleted file mode 100644
index c1cbe8b6..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener$EventTypeChecker.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.class
deleted file mode 100644
index 4513fd4d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/EventStreamCheckerListener.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class
deleted file mode 100644
index 99218cf6..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedAdviceAdapterListener.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class
deleted file mode 100644
index 929ef5f9..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/listener/InterruptedEventListener.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class
deleted file mode 100644
index da1c4642..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/enhance/target/Calculator.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class
deleted file mode 100644
index 3a0fe1bd..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class
deleted file mode 100644
index 13fcc600..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Human.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Human.class
deleted file mode 100644
index a1eb4103..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Human.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$InnerWorker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$InnerWorker.class
deleted file mode 100644
index dc5c48e7..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$InnerWorker.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Man.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Man.class
deleted file mode 100644
index 76896a35..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Man.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class
deleted file mode 100644
index e55a9b27..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$NameRegexWithSubClassesExtFilter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Woman.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Woman.class
deleted file mode 100644
index 3c12db9d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Woman.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class
deleted file mode 100644
index c0c8cf4d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase$Worker.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class
deleted file mode 100644
index 577890d8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreLoadedClassDataSourceTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class
deleted file mode 100644
index 860cef94..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$1.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$2.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$2.class
deleted file mode 100644
index 54be2c14..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$2.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class
deleted file mode 100644
index 4a92fee8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$3.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class
deleted file mode 100644
index b8cfa311..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$AnotherNormalModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class
deleted file mode 100644
index 84fc1f45..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnActiveModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class
deleted file mode 100644
index d7d5e19e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnCInitModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnFrozenModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnFrozenModule.class
deleted file mode 100644
index 88fbd1b8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnFrozenModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class
deleted file mode 100644
index 689ced10..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLazyActiveModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class
deleted file mode 100644
index 27dab64e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadCompletedModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class
deleted file mode 100644
index 0b82fec8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnLoadModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnUnLoadModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnUnLoadModule.class
deleted file mode 100644
index c00a2dbd..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$BrokenOnUnLoadModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class
deleted file mode 100644
index 4fa06809..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyCoreLoadedClassDataSource.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class
deleted file mode 100644
index c8d634c2..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyInstrumentation.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class
deleted file mode 100644
index 5e65619d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$EmptyProviderManager.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$ModifyAnotherNormalModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$ModifyAnotherNormalModule.class
deleted file mode 100644
index 592c1934..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$ModifyAnotherNormalModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalModule.class
deleted file mode 100644
index 01c9b8cc..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalOnLazyActiveModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalOnLazyActiveModule.class
deleted file mode 100644
index deead6f2..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase$NormalOnLazyActiveModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class
deleted file mode 100644
index 19d9690d..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/CoreModuleManagerTestCase.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class
deleted file mode 100644
index 67afe948..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/MockLoadedClassesOnlyInstrumentation.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class
deleted file mode 100644
index aeff4415..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/manager/ModuleLifeCycleAdapter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class
deleted file mode 100644
index 82cfff67..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/JarBuilder.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests$TestModule.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests$TestModule.class
deleted file mode 100644
index 68a2dfa7..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests$TestModule.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class
deleted file mode 100644
index 1bdd70fd..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/ModuleTests.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class
deleted file mode 100644
index 89bca32e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/QaClassUtils.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class
deleted file mode 100644
index 2e13844b..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/SandboxModuleJarBuilder.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/ClassStructureTestCaseByChildClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/ClassStructureTestCaseByChildClass.class
deleted file mode 100644
index 188bc678..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/ClassStructureTestCaseByChildClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class
deleted file mode 100644
index 66df3546..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter$AccessIsEnum.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class
deleted file mode 100644
index 9395f3e2..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/AccessAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class
deleted file mode 100644
index 7f773607..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/Asserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureAsserter.class
deleted file mode 100644
index 3adb14ca..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureCollectionAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureCollectionAsserter.class
deleted file mode 100644
index 69f3972c..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/BehaviorStructureCollectionAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class
deleted file mode 100644
index 86ceb83c..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class
deleted file mode 100644
index 52d53192..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/ClassStructureCollectionAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter$Mode.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter$Mode.class
deleted file mode 100644
index 42179401..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter$Mode.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class
deleted file mode 100644
index 278322b8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/asserts/MappingAsserter.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class
deleted file mode 100644
index 708b7161..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$InnerClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class
deleted file mode 100644
index 567ebe96..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedEnum.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class
deleted file mode 100644
index f69754ce..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedInterface.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class
deleted file mode 100644
index 40e75edc..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$ProtectedStaticClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class
deleted file mode 100644
index 0c261247..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicEnum.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class
deleted file mode 100644
index 17b9fe6f..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicInterface.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class
deleted file mode 100644
index 0d2363d7..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass$PublicStaticClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class
deleted file mode 100644
index 14cbb202..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ChildClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class
deleted file mode 100644
index b1028e20..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/GrandpaClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class
deleted file mode 100644
index 8dca7ca0..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirst.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class
deleted file mode 100644
index 66d01910..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IGrandpaInterfaceFirstFirst.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class
deleted file mode 100644
index 6651214e..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirst.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstFirst.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstFirst.class
deleted file mode 100644
index f29666f8..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstFirst.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class
deleted file mode 100644
index 988d9d6b..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceFirstSecond.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class
deleted file mode 100644
index bbabb4f1..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IParentInterfaceSecond.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class
deleted file mode 100644
index 2d63669f..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/IllInheritedAnnotation.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class
deleted file mode 100644
index 72fe85a1..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/InheritedAnnotation.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class b/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class
deleted file mode 100644
index 1e1d7054..00000000
Binary files a/sandbox-core/target/test-classes/com/alibaba/jvm/sandbox/qatest/core/util/matcher/target/ParentClass.class and /dev/null differ
diff --git a/sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar b/sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar
deleted file mode 100644
index 46fd103d..00000000
Binary files a/sandbox-core/target/test-classes/lib/sandbox-spy-1.1.0-for-qatest.jar and /dev/null differ
diff --git a/sandbox-core/target/test-classes/logback.xml b/sandbox-core/target/test-classes/logback.xml
deleted file mode 100755
index c7f37818..00000000
--- a/sandbox-core/target/test-classes/logback.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
- %d{yyyy-MM-dd HH:mm:ss} %5level %msg%n
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/sandbox-debug-module/pom.xml b/sandbox-debug-module/pom.xml
index 20022526..f91efe1c 100755
--- a/sandbox-debug-module/pom.xml
+++ b/sandbox-debug-module/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox-module-starter
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
../sandbox-module-starter/pom.xml
sandbox-debug-module
diff --git a/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module
deleted file mode 100644
index 19000a60..00000000
--- a/sandbox-debug-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module
+++ /dev/null
@@ -1,7 +0,0 @@
-com.alibaba.jvm.sandbox.module.debug.DebugRalphModule
-com.alibaba.jvm.sandbox.module.debug.DebugTraceModule
-com.alibaba.jvm.sandbox.module.debug.DebugWatchModule
-com.alibaba.jvm.sandbox.module.debug.ExceptionLoggerModule
-com.alibaba.jvm.sandbox.module.debug.HttpHttpAccessLoggerModule
-com.alibaba.jvm.sandbox.module.debug.JdbcLoggerModule
-com.alibaba.jvm.sandbox.module.debug.SpringLoggerModule
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class
deleted file mode 100644
index 776be39b..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class
deleted file mode 100644
index 70f31989..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class
deleted file mode 100644
index ae606de1..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$3.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$4.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$4.class
deleted file mode 100644
index 5be34be3..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$4.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class
deleted file mode 100644
index 482f742a..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$5.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$6.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$6.class
deleted file mode 100644
index 0474db73..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$6.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class
deleted file mode 100644
index 289712ba..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionFactory.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$1.class
deleted file mode 100644
index 22b2681d..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class
deleted file mode 100644
index 34134ac6..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class
deleted file mode 100644
index ee0e1c1a..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$3.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$4.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$4.class
deleted file mode 100644
index 78c2a924..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType$4.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class
deleted file mode 100644
index 48f8bb34..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule$ExceptionType.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.class
deleted file mode 100644
index 7d747f97..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugRalphModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule$1.class
deleted file mode 100644
index 54390c51..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class
deleted file mode 100644
index 1a4b653a..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugTraceModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class
deleted file mode 100644
index ee410901..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class
deleted file mode 100644
index 415404f8..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class
deleted file mode 100644
index e9df0ea2..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Bind.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Trigger.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Trigger.class
deleted file mode 100644
index 04ad4ca8..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule$Trigger.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class
deleted file mode 100644
index 264ae81d..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/DebugWatchModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class
deleted file mode 100644
index 811cea7b..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.class
deleted file mode 100644
index ad0c2cff..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ExceptionLoggerModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class
deleted file mode 100644
index fac06932..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$2.class
deleted file mode 100644
index 8efd9161..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class
deleted file mode 100644
index 7b05be13..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpAccess.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class
deleted file mode 100644
index 505e43b4..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule$HttpProcessStep.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.class
deleted file mode 100644
index 9705a508..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpHttpAccessLoggerModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$1.class
deleted file mode 100644
index ab851791..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class
deleted file mode 100644
index 8fde122d..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class
deleted file mode 100644
index baa1cf63..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$3.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class
deleted file mode 100644
index 29c8380e..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$4.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class
deleted file mode 100644
index 559059ad..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$Converter.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$HttpErrorCodeException.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$HttpErrorCodeException.class
deleted file mode 100644
index b5d782c2..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported$HttpErrorCodeException.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class
deleted file mode 100644
index 89e61f29..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/HttpSupported.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class
deleted file mode 100644
index a184c08b..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class
deleted file mode 100644
index c55c6f2b..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$2.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class
deleted file mode 100644
index 1d6e2d31..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule$MonitorJavaSqlPreparedStatementStep.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class
deleted file mode 100644
index 9a2c74c2..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/JdbcLoggerModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class
deleted file mode 100644
index bb02de2e..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/ProgressPrinter.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule$1.class
deleted file mode 100644
index 338d2427..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class
deleted file mode 100644
index c1d2caf9..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/SpringLoggerModule.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TComponent.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TComponent.class
deleted file mode 100644
index 2d645cc7..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TComponent.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class
deleted file mode 100644
index 4be6c3d2..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class
deleted file mode 100644
index f8e0a910..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Callback.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Node.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Node.class
deleted file mode 100644
index 162f26f3..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree$Node.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class
deleted file mode 100644
index b81c08c7..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/textui/TTree.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressException.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressException.class
deleted file mode 100644
index 8898ec01..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressException.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class
deleted file mode 100644
index d47dc88a..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory$1.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class
deleted file mode 100644
index 49194afe..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$ExpressFactory.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class
deleted file mode 100644
index 3472e9af..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express$OgnlExpress.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express.class
deleted file mode 100644
index 3fc582cb..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/Express.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/GaEnumUtils.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/GaEnumUtils.class
deleted file mode 100644
index 6ce45033..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/GaEnumUtils.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.class b/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.class
deleted file mode 100644
index 1297d9a4..00000000
Binary files a/sandbox-debug-module/target/classes/com/alibaba/jvm/sandbox/module/debug/util/SimpleDateFormatHolder.class and /dev/null differ
diff --git a/sandbox-debug-module/target/classes/logback.xml b/sandbox-debug-module/target/classes/logback.xml
deleted file mode 100755
index d80c27bd..00000000
--- a/sandbox-debug-module/target/classes/logback.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-
-
-
-
- ${user.home}/logs/sandbox/debug/servlet-monitor.log
-
- ${user.home}/logs/sandbox/debug/servlet-monitor.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
-
-
- ${user.home}/logs/sandbox/debug/exception-monitor.log
-
- ${user.home}/logs/sandbox/debug/exception-monitor.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
-
-
- ${user.home}/logs/sandbox/debug/jdbc-monitor.log
-
- ${user.home}/logs/sandbox/debug/jdbc-monitor.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
-
-
- ${user.home}/logs/sandbox/debug/spring-monitor.log
-
- ${user.home}/logs/sandbox/debug/spring-monitor.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
-
-
- ${user.home}/logs/sandbox/debug/debug.log
-
- ${user.home}/logs/sandbox/debug/debug.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
\ No newline at end of file
diff --git a/sandbox-mgr-module/pom.xml b/sandbox-mgr-module/pom.xml
index 0d17e5f7..ba77aa62 100755
--- a/sandbox-mgr-module/pom.xml
+++ b/sandbox-mgr-module/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox-module-starter
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
../sandbox-module-starter/pom.xml
sandbox-mgr-module
@@ -47,6 +47,12 @@
com.alibaba.jvm.sandbox
sandbox-api
provided
+
+
+ javax.servlet
+ javax.servlet-api
+
+
org.slf4j
diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java
index 32986785..5920bfa5 100644
--- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java
+++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ControlModule.java
@@ -3,20 +3,22 @@
import com.alibaba.jvm.sandbox.api.Information;
import com.alibaba.jvm.sandbox.api.Module;
import com.alibaba.jvm.sandbox.api.ModuleException;
-import com.alibaba.jvm.sandbox.api.http.Http;
+import com.alibaba.jvm.sandbox.api.annotation.Command;
import com.alibaba.jvm.sandbox.api.resource.ConfigInfo;
import com.alibaba.jvm.sandbox.api.resource.ModuleManager;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.reflect.MethodUtils;
+import org.kohsuke.MetaInfServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-@Information(id = "control", version = "0.0.1", author = "luanjia@taobao.com")
+@MetaInfServices(Module.class)
+@Information(id = "control", version = "0.0.2", author = "luanjia@taobao.com")
public class ControlModule implements Module {
private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -106,8 +108,9 @@ private void shutdownServer(final ClassLoader sandboxClassLoader)
logger.info("shutdown jvm-sandbox[{}] server success for shutdown.", configInfo.getNamespace());
}
- @Http("/shutdown")
- public void shutdown(final HttpServletResponse resp) throws Exception {
+ // @Http("/shutdown")
+ @Command("shutdown")
+ public void shutdown(final PrintWriter writer) throws Exception {
logger.info("prepare to shutdown jvm-sandbox[{}].", configInfo.getNamespace());
@@ -138,9 +141,9 @@ public void run() {
shutdownJvmSandboxHook.setDaemon(true);
// 在卸载自己之前,先向这个世界发出最后的呐喊吧!
- resp.getWriter().println(String.format("jvm-sandbox[%s] shutdown finished.", configInfo.getNamespace()));
- resp.getWriter().flush();
- resp.getWriter().close();
+ writer.println(String.format("jvm-sandbox[%s] shutdown finished.", configInfo.getNamespace()));
+ writer.flush();
+ writer.close();
shutdownJvmSandboxHook.start();
diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java
index 5d7907c1..2ccb6495 100755
--- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java
+++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/InfoModule.java
@@ -2,31 +2,33 @@
import com.alibaba.jvm.sandbox.api.Information;
import com.alibaba.jvm.sandbox.api.Module;
+import com.alibaba.jvm.sandbox.api.annotation.Command;
import com.alibaba.jvm.sandbox.api.event.Event;
-import com.alibaba.jvm.sandbox.api.http.Http;
import com.alibaba.jvm.sandbox.api.resource.ConfigInfo;
-import com.alibaba.jvm.sandbox.api.resource.EventMonitor;
+import org.kohsuke.MetaInfServices;
import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
+import java.io.PrintWriter;
/**
* 沙箱信息模块
*
* @author luanjia@taobao.com
*/
-@Information(id = "info", version = "0.0.3", author = "luanjia@taobao.com")
+@MetaInfServices(Module.class)
+@Information(id = "info", version = "0.0.4", author = "luanjia@taobao.com")
public class InfoModule implements Module {
@Resource
private ConfigInfo configInfo;
- @Resource
- private EventMonitor eventMonitor;
+// @Resource
+// private EventMonitor eventMonitor;
- @Http("/version")
- public void version(final HttpServletResponse resp) throws IOException {
+ //@Http("/version")
+ @Command("version")
+ public void version(final PrintWriter writer) throws IOException {
final StringBuilder versionSB = new StringBuilder()
.append(" NAMESPACE : ").append(configInfo.getNamespace()).append("\n")
@@ -40,32 +42,29 @@ public void version(final HttpServletResponse resp) throws IOException {
.append(" USER_MODULE_LIB : ").append(configInfo.getUserModuleLibPath()).append("\n")
.append(" SYSTEM_PROVIDER_LIB : ").append(configInfo.getSystemProviderLibPath()).append("\n")
.append(" EVENT_POOL_SUPPORT : ").append(configInfo.isEnableEventPool() ? "ENABLE" : "DISABLE");
- /*############################# : */
- if (configInfo.isEnableEventPool()) {
- versionSB
- .append("\n")
- /*############################# : */
- .append(" EVENT_POOL_PER_KEY_IDLE_MIN : ").append(configInfo.getEventPoolMinIdlePerEvent()).append("\n")
- .append(" EVENT_POOL_PER_KEY_IDLE_MAX : ").append(configInfo.getEventPoolMaxIdlePerEvent()).append("\n")
- .append(" EVENT_POOL_PER_KEY_TOTAL_MAX : ").append(configInfo.getEventPoolMaxTotalPerEvent()).append("\n")
- .append(" EVENT_POOL_TOTAL : ").append(configInfo.getEventPoolMaxTotal())
- ;
- }
+// /*############################# : */
+// if (configInfo.isEnableEventPool()) {
+// versionSB
+// .append("\n")
+// /*############################# : */
+// .append(" EVENT_POOL_PER_KEY_IDLE_MIN : ").append(configInfo.getEventPoolMinIdlePerEvent()).append("\n")
+// .append(" EVENT_POOL_PER_KEY_IDLE_MAX : ").append(configInfo.getEventPoolMaxIdlePerEvent()).append("\n")
+// .append(" EVENT_POOL_PER_KEY_TOTAL_MAX : ").append(configInfo.getEventPoolMaxTotalPerEvent()).append("\n")
+// .append(" EVENT_POOL_TOTAL : ").append(configInfo.getEventPoolMaxTotal())
+// ;
+// }
- resp.getWriter().println(versionSB.toString());
+ writer.println(versionSB.toString());
+ writer.flush();
}
- @Http("/event-pool")
- public void eventPool(final HttpServletResponse resp) throws IOException {
+ //@Http("/event-pool")
+ @Command("event-pool")
+ public void eventPool(final PrintWriter writer) throws IOException {
for (Event.Type type : Event.Type.values()) {
- resp.getWriter().println(String.format(
- "%18s : %d / %d",
- type,
- eventMonitor.getEventPoolInfo().getNumActive(type),
- eventMonitor.getEventPoolInfo().getNumIdle(type)
- ));
+ writer.println(String.format("%18s : %d / %d", type, 0, 0));
}
}
diff --git a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java
index 728bb987..068dd730 100755
--- a/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java
+++ b/sandbox-mgr-module/src/main/java/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.java
@@ -3,26 +3,24 @@
import com.alibaba.jvm.sandbox.api.Information;
import com.alibaba.jvm.sandbox.api.Module;
import com.alibaba.jvm.sandbox.api.ModuleException;
-import com.alibaba.jvm.sandbox.api.http.Http;
+import com.alibaba.jvm.sandbox.api.annotation.Command;
import com.alibaba.jvm.sandbox.api.resource.ModuleManager;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
+import org.kohsuke.MetaInfServices;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.annotation.Resource;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Map;
import static com.alibaba.jvm.sandbox.api.util.GaStringUtils.matching;
-import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import static org.apache.commons.lang3.StringUtils.EMPTY;
/**
@@ -30,7 +28,8 @@
*
* @author luanjia@taobao.com
*/
-@Information(id = "module-mgr", author = "luanjia@taobao.com", version = "0.0.1")
+@MetaInfServices(Module.class)
+@Information(id = "module-mgr", author = "luanjia@taobao.com", version = "0.0.2")
public class ModuleMgrModule implements Module {
private final Logger logger = LoggerFactory.getLogger(getClass());
@@ -39,8 +38,8 @@ public class ModuleMgrModule implements Module {
private ModuleManager moduleManager;
// 获取参数值
- private String getParamWithDefault(final HttpServletRequest req, final String name, final String defaultValue) {
- final String valueFromReq = req.getParameter(name);
+ private String getParamWithDefault(final Map param, final String name, final String defaultValue) {
+ final String valueFromReq = param.get(name);
return StringUtils.isBlank(valueFromReq)
? defaultValue
: valueFromReq;
@@ -64,11 +63,11 @@ private void output(final PrintWriter writer, final String format, final Object.
writer.println(String.format(format, objectArray));
}
- @Http("/list")
- public void list(final HttpServletResponse resp) throws IOException {
+ // @Http("/list")
+ @Command("list")
+ public void list(final PrintWriter writer) throws IOException {
int total = 0;
- final PrintWriter writer = resp.getWriter();
for (final Module module : moduleManager.list()) {
final Information info = module.getClass().getAnnotation(Information.class);
@@ -104,26 +103,29 @@ public void list(final HttpServletResponse resp) throws IOException {
output(writer, "total=%s", total);
}
- @Http("/flush")
- public void flush(final HttpServletRequest req,
- final HttpServletResponse resp) throws ModuleException, IOException {
- final String isForceString = getParamWithDefault(req, "force", EMPTY);
+ // @Http("/flush")
+ @Command("flush")
+ public void flush(final Map param,
+ final PrintWriter writer) throws ModuleException {
+ final String isForceString = getParamWithDefault(param, "force", EMPTY);
final boolean isForce = BooleanUtils.toBoolean(isForceString);
moduleManager.flush(isForce);
- output(resp.getWriter(), "module flush finished, total=%s;", moduleManager.list().size());
+ output(writer, "module flush finished, total=%s;", moduleManager.list().size());
}
- @Http("/reset")
- public void reset(final HttpServletResponse resp) throws ModuleException, IOException {
+ // @Http("/reset")
+ @Command("reset")
+ public void reset(final PrintWriter writer) throws ModuleException {
moduleManager.reset();
- output(resp.getWriter(), "module reset finished, total=%s;", moduleManager.list().size());
+ output(writer, "module reset finished, total=%s;", moduleManager.list().size());
}
- @Http("/unload")
- public void unload(final HttpServletRequest req,
- final HttpServletResponse resp) throws ServletException, IOException {
+ // @Http("/unload")
+ @Command("unload")
+ public void unload(final Map param,
+ final PrintWriter writer) {
int total = 0;
- final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY);
+ final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY);
for (final Module module : search(idsStringPattern)) {
final Information info = module.getClass().getAnnotation(Information.class);
try {
@@ -133,14 +135,15 @@ public void unload(final HttpServletRequest req,
logger.warn("unload module[id={};] occur error={}.", me.getUniqueId(), me.getErrorCode(), me);
}
}
- output(resp.getWriter(), "total %s module unloaded.", total);
+ output(writer, "total %s module unloaded.", total);
}
- @Http("/active")
- public void active(final HttpServletRequest req,
- final HttpServletResponse resp) throws ModuleException, IOException {
+ // @Http("/active")
+ @Command("active")
+ public void active(final Map param,
+ final PrintWriter writer) throws ModuleException {
int total = 0;
- final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY);
+ final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY);
for (final Module module : search(idsStringPattern)) {
final Information info = module.getClass().getAnnotation(Information.class);
final boolean isActivated = moduleManager.isActivated(info.id());
@@ -155,14 +158,15 @@ public void active(final HttpServletRequest req,
total++;
}
}// for
- output(resp.getWriter(), "total %s module activated.", total);
+ output(writer, "total %s module activated.", total);
}
- @Http("/frozen")
- public void frozen(final HttpServletRequest req,
- final HttpServletResponse resp) throws ModuleException, IOException {
+ // @Http("/frozen")
+ @Command("frozen")
+ public void frozen(final Map param,
+ final PrintWriter writer) throws ModuleException {
int total = 0;
- final String idsStringPattern = getParamWithDefault(req, "ids", EMPTY);
+ final String idsStringPattern = getParamWithDefault(param, "ids", EMPTY);
for (final Module module : search(idsStringPattern)) {
final Information info = module.getClass().getAnnotation(Information.class);
final boolean isActivated = moduleManager.isActivated(info.id());
@@ -178,22 +182,23 @@ public void frozen(final HttpServletRequest req,
}
}
- output(resp.getWriter(), "total %s module frozen.", total);
+ output(writer, "total %s module frozen.", total);
}
- @Http("/detail")
- public void detail(final HttpServletRequest req,
- final HttpServletResponse resp) throws ModuleException, IOException {
- final String uniqueId = req.getParameter("id");
+ // @Http("/detail")
+ @Command("detail")
+ public void detail(final Map param,
+ final PrintWriter writer) throws ModuleException {
+ final String uniqueId = param.get("id");
if (StringUtils.isBlank(uniqueId)) {
// 如果参数不对,则认为找不到对应的沙箱模块,返回400
- resp.sendError(SC_BAD_REQUEST, "id parameter was required.");
+ writer.println("id parameter was required.");
return;
}
final Module module = moduleManager.get(uniqueId);
if (null == module) {
- resp.sendError(SC_BAD_REQUEST, String.format("module[id=%s] is not existed.", uniqueId));
+ writer.println(String.format("module[id=%s] is not existed.", uniqueId));
return;
}
@@ -214,7 +219,7 @@ public void detail(final HttpServletRequest req,
" cCnt : " + cCnt + "\n" +
" mCnt : " + mCnt;
- output(resp.getWriter(), sb);
+ output(writer, sb);
}
diff --git a/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module
deleted file mode 100755
index b90a60e6..00000000
--- a/sandbox-mgr-module/src/main/resources/META-INF/services/com.alibaba.jvm.sandbox.api.Module
+++ /dev/null
@@ -1,3 +0,0 @@
-com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule
-com.alibaba.jvm.sandbox.module.mgr.InfoModule
-com.alibaba.jvm.sandbox.module.mgr.ControlModule
\ No newline at end of file
diff --git a/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module b/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module
deleted file mode 100755
index b90a60e6..00000000
--- a/sandbox-mgr-module/target/classes/META-INF/services/com.alibaba.jvm.sandbox.api.Module
+++ /dev/null
@@ -1,3 +0,0 @@
-com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule
-com.alibaba.jvm.sandbox.module.mgr.InfoModule
-com.alibaba.jvm.sandbox.module.mgr.ControlModule
\ No newline at end of file
diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class
deleted file mode 100644
index edd62582..00000000
Binary files a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule$1.class and /dev/null differ
diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule.class
deleted file mode 100644
index f82dea63..00000000
Binary files a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ControlModule.class and /dev/null differ
diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/InfoModule.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/InfoModule.class
deleted file mode 100644
index bfbc7b49..00000000
Binary files a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/InfoModule.class and /dev/null differ
diff --git a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class b/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class
deleted file mode 100644
index 40240d56..00000000
Binary files a/sandbox-mgr-module/target/classes/com/alibaba/jvm/sandbox/module/mgr/ModuleMgrModule.class and /dev/null differ
diff --git a/sandbox-mgr-module/target/classes/logback.xml b/sandbox-mgr-module/target/classes/logback.xml
deleted file mode 100755
index e5836cd2..00000000
--- a/sandbox-mgr-module/target/classes/logback.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
- ${user.home}/logs/sandbox/sandbox-mgr.log
-
- ${user.home}/logs/sandbox/sandbox-mgr.log.%d{yyyy-MM-dd}
- 30
-
-
- %d{yyyy-MM-dd HH:mm:ss} %-5level %msg%n
- UTF-8
-
-
-
-
-
\ No newline at end of file
diff --git a/sandbox-mgr-provider/pom.xml b/sandbox-mgr-provider/pom.xml
index a69e579b..19497bef 100644
--- a/sandbox-mgr-provider/pom.xml
+++ b/sandbox-mgr-provider/pom.xml
@@ -6,7 +6,7 @@
sandbox
com.alibaba.jvm.sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-mgr-provider
sandbox-mgr-provider ${sandbox.version}
diff --git a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain b/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain
deleted file mode 100644
index 8a1bd53c..00000000
--- a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain
+++ /dev/null
@@ -1 +0,0 @@
-com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleJarLoadingChain
\ No newline at end of file
diff --git a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain b/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain
deleted file mode 100644
index 7457548b..00000000
--- a/sandbox-mgr-provider/target/classes/META-INF/services/com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain
+++ /dev/null
@@ -1 +0,0 @@
-com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleLoadingChain
\ No newline at end of file
diff --git a/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class b/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class
deleted file mode 100644
index ddc309fb..00000000
Binary files a/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleJarLoadingChain.class and /dev/null differ
diff --git a/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleLoadingChain.class b/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleLoadingChain.class
deleted file mode 100644
index 506969b3..00000000
Binary files a/sandbox-mgr-provider/target/classes/com/alibaba/jvm/sandbox/provider/mgr/EmptyModuleLoadingChain.class and /dev/null differ
diff --git a/sandbox-module-starter/pom.xml b/sandbox-module-starter/pom.xml
index 9565a09c..46ec8977 100644
--- a/sandbox-module-starter/pom.xml
+++ b/sandbox-module-starter/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-module-starter
sandbox-module-starter ${sandbox.version}
diff --git a/sandbox-provider-api/pom.xml b/sandbox-provider-api/pom.xml
index 12f0344f..4807571e 100644
--- a/sandbox-provider-api/pom.xml
+++ b/sandbox-provider-api/pom.xml
@@ -6,7 +6,7 @@
sandbox
com.alibaba.jvm.sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-provider-api
sandbox-provider-api ${sandbox.version}
diff --git a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class b/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class
deleted file mode 100644
index e3805afb..00000000
Binary files a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleJarLoadingChain.class and /dev/null differ
diff --git a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class b/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class
deleted file mode 100644
index 6d578adb..00000000
Binary files a/sandbox-provider-api/target/classes/com/alibaba/jvm/sandbox/provider/api/ModuleLoadingChain.class and /dev/null differ
diff --git a/sandbox-spy/pom.xml b/sandbox-spy/pom.xml
index df4cfc43..39a495ef 100755
--- a/sandbox-spy/pom.xml
+++ b/sandbox-spy/pom.xml
@@ -6,7 +6,7 @@
com.alibaba.jvm.sandbox
sandbox
- 1.1.2-SNAPSHOT
+ 1.2.0-SNAPSHOT
sandbox-spy
sandbox-spy ${sandbox.version}
diff --git a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java
index 5b6de7fe..e7d0b01e 100755
--- a/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java
+++ b/sandbox-spy/src/main/java/java/com/alibaba/jvm/sandbox/spy/Spy.java
@@ -258,8 +258,14 @@ void insert(final Node top, final Node node) {
}
}
+ int abs(int val) {
+ return val < 0
+ ? val * -1
+ : val;
+ }
+
boolean isEnter(Thread thread) {
- final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH];
+ final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH];
Node node = top;
synchronized (top) {
while (null != node.next) {
@@ -273,7 +279,7 @@ boolean isEnter(Thread thread) {
}
Node enter(Thread thread) {
- final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH];
+ final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH];
final Node node = new Node(thread);
synchronized (top) {
insert(top, node);
@@ -282,7 +288,7 @@ Node enter(Thread thread) {
}
void exit(Thread thread, Node node) {
- final Node top = nodeArray[thread.hashCode() % THREAD_LOCAL_ARRAY_LENGTH];
+ final Node top = nodeArray[abs(thread.hashCode()) % THREAD_LOCAL_ARRAY_LENGTH];
synchronized (top) {
delete(node);
}
diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class
deleted file mode 100644
index e23ee682..00000000
Binary files a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$MethodHook.class and /dev/null differ
diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$Ret.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$Ret.class
deleted file mode 100644
index 178317d5..00000000
Binary files a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$Ret.class and /dev/null differ
diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class
deleted file mode 100644
index 60269c1a..00000000
Binary files a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier$Node.class and /dev/null differ
diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier.class
deleted file mode 100644
index 34170055..00000000
Binary files a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy$SelfCallBarrier.class and /dev/null differ
diff --git a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class b/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class
deleted file mode 100644
index 4303988a..00000000
Binary files a/sandbox-spy/target/classes/java/com/alibaba/jvm/sandbox/spy/Spy.class and /dev/null differ