diff --git a/assembly.xml b/assembly.xml
index b7d32b8e..bf83bfa0 100644
--- a/assembly.xml
+++ b/assembly.xml
@@ -53,6 +53,13 @@
**/**
+
+ chaosblade-exec-spi/target/classes
+
+
+ **/**
+
+
diff --git a/chaosblade-exec-common/pom.xml b/chaosblade-exec-common/pom.xml
index 474bf426..c76c3f3d 100644
--- a/chaosblade-exec-common/pom.xml
+++ b/chaosblade-exec-common/pom.xml
@@ -29,6 +29,11 @@
+
+ com.alibaba.chaosblade
+ chaosblade-exec-spi
+ ${project.version}
+
org.projectlombok
lombok
diff --git a/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/aop/matcher/busi/BusinessParamMatcher.java b/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/aop/matcher/busi/BusinessParamMatcher.java
new file mode 100644
index 00000000..b091565f
--- /dev/null
+++ b/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/aop/matcher/busi/BusinessParamMatcher.java
@@ -0,0 +1,41 @@
+package com.alibaba.chaosblade.exec.common.aop.matcher.busi;
+
+import com.alibaba.chaosblade.exec.common.aop.CustomMatcher;
+import com.alibaba.chaosblade.exec.common.util.BusinessParamUtil;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author wufunc@gmail.com
+ */
+public class BusinessParamMatcher implements CustomMatcher {
+ private static final BusinessParamMatcher INSTANCE = new BusinessParamMatcher();
+
+ private BusinessParamMatcher() {
+ }
+
+ public static BusinessParamMatcher getInstance() {
+ return INSTANCE;
+ }
+
+ @Override
+ public boolean match(String commandValue, Object originValue) {
+ Map businessData = (Map) originValue;
+ List businessParams = BusinessParamUtil.parseFromJsonStr(commandValue);
+ for (BusinessParamUtil.BusinessParam businessParam : businessParams) {
+ if (!businessData.containsKey(businessParam.getKey())) {
+ return false;
+ }
+ if (!businessData.get(businessParam.getKey()).equals(businessParam.getValue())) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean regexMatch(String commandValue, Object originValue) {
+ return false;
+ }
+}
diff --git a/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/center/DefaultSPIServiceManager.java b/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/center/DefaultSPIServiceManager.java
new file mode 100644
index 00000000..f0ebc805
--- /dev/null
+++ b/chaosblade-exec-common/src/main/java/com/alibaba/chaosblade/exec/common/center/DefaultSPIServiceManager.java
@@ -0,0 +1,51 @@
+package com.alibaba.chaosblade.exec.common.center;
+
+
+import java.util.*;
+
+public class DefaultSPIServiceManager implements SPIServiceManager {
+ private static Map> spiMap;
+
+ static {
+ spiMap = new HashMap>();
+ }
+
+ @Override
+ public void load() {
+
+ }
+ @Override
+ public List
+
+ com.alibaba.chaosblade
+ chaosblade-exec-spi
+ ${project.version}
+
diff --git a/chaosblade-exec-spi/pom.xml b/chaosblade-exec-spi/pom.xml
new file mode 100644
index 00000000..dacbc9fe
--- /dev/null
+++ b/chaosblade-exec-spi/pom.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+ chaosblade-exec-jvm
+ com.alibaba.chaosblade
+ 1.4.0
+
+ 4.0.0
+
+ chaosblade-exec-spi
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 6
+ 6
+
+
+
+
+
+
+
diff --git a/chaosblade-exec-spi/src/main/java/com/alibaba/chaosblade/exec/spi/BusinessDataGetter.java b/chaosblade-exec-spi/src/main/java/com/alibaba/chaosblade/exec/spi/BusinessDataGetter.java
new file mode 100644
index 00000000..9278cae6
--- /dev/null
+++ b/chaosblade-exec-spi/src/main/java/com/alibaba/chaosblade/exec/spi/BusinessDataGetter.java
@@ -0,0 +1,8 @@
+package com.alibaba.chaosblade.exec.spi;
+
+/**
+ * @author wufunc@gmail.com
+ */
+public interface BusinessDataGetter {
+ String get(String key) throws Exception;
+}
\ No newline at end of file
diff --git a/doc/zh-cn/design.md b/doc/zh-cn/design.md
index 1dae41b8..380e548f 100644
--- a/doc/zh-cn/design.md
+++ b/doc/zh-cn/design.md
@@ -132,7 +132,7 @@ public void beforeAdvice(String targetName,
./blade create servlet --requestpath=/topic delay --time=3000
````
该命令下发后,触发SandboxModule @Http("/create")注解标记的方法,将事件分发给com.alibaba.chaosblade.exec.service.handler.CreateHandler处理
-在判断必要的uid、target、action、model参数后调用handleInjection,handleInjection通过状态管理器注册本次实验,如果插件类型是PreCreateInjectionModelHandler的类型,将预处理一些东西。同是如果Action类型是DirectlyInjectionAction,那么将直接进行故障能力注入,如jvm oom等,如果不是那么将加载插件。
+在判断必要的uid、target、action、model参数后调用handleInjection,handleInjection通过状态管理器注册本次实验,如果插件类型是PreCreateInjectionModelHandler的类型,将预处理一些东西。同时如果Action类型是DirectlyInjectionAction,那么将直接进行故障能力注入,如jvm oom等,如果不是那么将加载插件。
#### ModelSpec
- PreCreateInjectionModelHandler 预创建
@@ -188,7 +188,7 @@ public class ServletEnhancer extends BeforeEnhancer {
@Override
public EnhancerModel doBeforeAdvice(ClassLoader classLoader, String className, Object object,
- Method method, Object[] methodArguments)
+ Method method, Object[] methodArguments,String targetName)
throws Exception {
// 获取原方法的一些参数
Object request = methodArguments[0];
@@ -323,7 +323,7 @@ public Response handle(Request request) {
````shell
./blade revoke 98e792c9a9a5dfea
````
-该命令下发后,触发SandboxModule unload()事件,同是插件卸载。
+该命令下发后,触发SandboxModule unload()事件,同时插件卸载。
```java
public void onUnload() throws Throwable {
diff --git a/doc/zh-cn/plugin.md b/doc/zh-cn/plugin.md
index 96380562..3c25d099 100644
--- a/doc/zh-cn/plugin.md
+++ b/doc/zh-cn/plugin.md
@@ -26,7 +26,7 @@ public class ServletEnhancer extends BeforeEnhancer {
Object object,
Method method,
Object[] methodArguments
- ) throws Exception {
+ ,String targetName) throws Exception {
Object request = methodArguments[0];
// 执行被增强类的方法,获取一些需要的值
String queryString = ReflectUtil.invokeMethod(request, "getQueryString", new Object[] {}, false);
diff --git a/pom.xml b/pom.xml
index 4ee88541..a2c66a3c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,6 +25,7 @@
pom
1.4.0
+ chaosblade-exec-spi
chaosblade-exec-bootstrap
chaosblade-exec-common
chaosblade-exec-plugin