diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml
index 0fffaf78..c2fe5c3e 100644
--- a/liteflow-core/pom.xml
+++ b/liteflow-core/pom.xml
@@ -9,7 +9,7 @@
com.yomahub
liteflow
- 2.7.1
+ 2.7.2
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
index 74c5b155..21a47456 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
@@ -370,7 +370,6 @@ public class FlowExecutor {
if (ObjectUtil.isNotNull(param)){
slot.setRequestData(param);
}
- slot.setChainName(chainId);
} else {
if (ObjectUtil.isNotNull(param)){
slot.setChainReqData(chainId, param);
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
index 4588d738..7fdd82b1 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java
@@ -300,6 +300,10 @@ public abstract class NodeComponent{
return getSlot().getRequestData();
}
+ public T getSubChainReqData(){
+ return getSlot().getChainReqData(this.getChainName());
+ }
+
public String getChainName(){
return getSlot().getChainName();
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java
index 529eec75..d4b4965a 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java
@@ -28,6 +28,7 @@ import com.yomahub.liteflow.thread.ExecutorHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.xml.crypto.Data;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
@@ -83,14 +84,26 @@ public class Chain implements Executable {
if (CollUtil.isEmpty(conditionList)) {
throw new FlowSystemException("no conditionList in this chain[" + chainName + "]");
}
- for (Condition condition : conditionList) {
- if (condition instanceof ThenCondition) {
- for (Executable executableItem : condition.getNodeList()) {
- executableItem.execute(slotIndex);
+ Slot> slot = DataBus.getSlot(slotIndex);
+ try{
+ //在子流程或者隐式流程里,slot需要取到的chainName是当前流程,所以这不再是set,而是push
+ //其底层结构是一个stack
+ slot.pushChainName(chainName);
+
+ //循环condition进行执行
+ for (Condition condition : conditionList) {
+ if (condition instanceof ThenCondition) {
+ for (Executable executableItem : condition.getNodeList()) {
+ executableItem.execute(slotIndex);
+ }
+ } else if (condition instanceof WhenCondition) {
+ executeAsyncCondition((WhenCondition) condition, slotIndex);
}
- } else if (condition instanceof WhenCondition) {
- executeAsyncCondition((WhenCondition) condition, slotIndex);
}
+ }finally {
+ //流程结束后,需要把当前的chainName从stack结构中移出
+ //里面的逻辑判断了当只剩根chainName的时候,不移除
+ slot.popChainName();
}
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
index 1c7cc3dc..f0bdc1a9 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
@@ -15,6 +15,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Iterator;
import java.util.Queue;
+import java.util.Stack;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -63,6 +64,10 @@ public class Slot{
this.contextBean = contextBean;
}
+ private boolean hasMetaData(String key){
+ return metaDataMap.containsKey(key);
+ }
+
private void putMetaDataMap(String key, T t) {
if (ObjectUtil.isNull(t)) {
//data slot is a ConcurrentHashMap, so null value will trigger NullPointerException
@@ -152,12 +157,33 @@ public class Slot{
return (T) metaDataMap.get(COND_NODE_PREFIX + key);
}
- public void setChainName(String chainName) {
- putMetaDataMap(CHAIN_NAME, chainName);
+ public void pushChainName(String chainName) {
+ if (this.hasMetaData(CHAIN_NAME)){
+ Stack stack = (Stack)metaDataMap.get(CHAIN_NAME);
+ stack.push(chainName);
+ }else{
+ Stack stack = new Stack<>();
+ stack.push(chainName);
+ this.putMetaDataMap(CHAIN_NAME, stack);
+ }
+ }
+
+ public void popChainName(){
+ if (this.hasMetaData(CHAIN_NAME)){
+ Stack stack = (Stack)metaDataMap.get(CHAIN_NAME);
+ if (stack.size() > 1){
+ stack.pop();
+ }
+ }
}
public String getChainName() {
- return (String) metaDataMap.get(CHAIN_NAME);
+ try{
+ Stack stack = (Stack)metaDataMap.get(CHAIN_NAME);
+ return stack.peek();
+ }catch (Exception e){
+ return null;
+ }
}
public void addStep(CmpStep step){
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java
index 459eeee2..e4996129 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LOGOPrinter.java
@@ -19,7 +19,7 @@ public class LOGOPrinter {
str.append(" | | | | | | | _| _____| |_ | | | | | \\ \\ /\\ / / \n");
str.append(" | |___ | | | | | |__|_____| _| | |__| |_| |\\ V V / \n");
str.append(" |_____|___| |_| |_____| |_| |_____\\___/ \\_/\\_/ \n\n");
- str.append(" Version: v2.7.1\n");
+ str.append(" Version: v2.7.2\n");
str.append(" 轻量且强大的规则引擎框架。\n");
str.append(" Small but powerful rules engine.\n");
str.append("================================================================================================\n");
diff --git a/liteflow-script-common/pom.xml b/liteflow-script-common/pom.xml
index a3dffa8b..77677ed9 100644
--- a/liteflow-script-common/pom.xml
+++ b/liteflow-script-common/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-script-groovy/pom.xml b/liteflow-script-groovy/pom.xml
index 6fb669b1..006dcec1 100644
--- a/liteflow-script-groovy/pom.xml
+++ b/liteflow-script-groovy/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-script-qlexpress/pom.xml b/liteflow-script-qlexpress/pom.xml
index eee133ef..5c64d438 100644
--- a/liteflow-script-qlexpress/pom.xml
+++ b/liteflow-script-qlexpress/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-spring-boot-starter/pom.xml b/liteflow-spring-boot-starter/pom.xml
index b95c2efd..37873d03 100644
--- a/liteflow-spring-boot-starter/pom.xml
+++ b/liteflow-spring-boot-starter/pom.xml
@@ -10,7 +10,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
diff --git a/liteflow-spring/pom.xml b/liteflow-spring/pom.xml
index 44a8b864..6c0d48e4 100644
--- a/liteflow-spring/pom.xml
+++ b/liteflow-spring/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-declare-component/pom.xml b/liteflow-testcase-declare-component/pom.xml
index aea858db..6cbb9079 100644
--- a/liteflow-testcase-declare-component/pom.xml
+++ b/liteflow-testcase-declare-component/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
index ea9af06f..fa014d72 100644
--- a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
+++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
@@ -45,5 +45,7 @@ public class ImplicitSubFlowSpringbootTest extends BaseTest {
Assert.assertEquals(1, RUN_TIME_SLOT.size());
// set中第一次设置的requestId和response中的requestId一致
Assert.assertTrue(RUN_TIME_SLOT.contains(response.getSlot().getRequestId()));
+ //requestData的取值正确
+ Assert.assertEquals("it's implicit subflow.", response.getContextBean().getData("innerRequest"));
}
}
diff --git a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
index d8c5eebf..7f2f79b5 100644
--- a/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
+++ b/liteflow-testcase-declare-component/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
@@ -4,6 +4,7 @@ import com.yomahub.liteflow.annotation.LiteflowCmpDefine;
import com.yomahub.liteflow.annotation.LiteflowMethod;
import com.yomahub.liteflow.core.NodeComponent;
import com.yomahub.liteflow.enums.LiteFlowMethodEnum;
+import com.yomahub.liteflow.slot.DefaultContext;
import org.springframework.stereotype.Component;
import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RUN_TIME_SLOT;
@@ -14,6 +15,9 @@ import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RU
public class HCmp{
@LiteflowMethod(LiteFlowMethodEnum.PROCESS)
public void process(NodeComponent bindCmp) throws Exception {
+ String requestData = bindCmp.getSubChainReqData();
+ DefaultContext context = bindCmp.getContextBean();
+ context.setData("innerRequest", requestData);
RUN_TIME_SLOT.add(bindCmp.getSlot().getRequestId());
diff --git a/liteflow-testcase-nospring/pom.xml b/liteflow-testcase-nospring/pom.xml
index 27cf19d9..13ef6343 100644
--- a/liteflow-testcase-nospring/pom.xml
+++ b/liteflow-testcase-nospring/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowTest.java
index 20f649af..e633a0f7 100644
--- a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowTest.java
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowTest.java
@@ -42,5 +42,7 @@ public class ImplicitSubFlowTest extends BaseTest {
Assert.assertEquals(1, RUN_TIME_SLOT.size());
// set中第一次设置的requestId和response中的requestId一致
Assert.assertTrue(RUN_TIME_SLOT.contains(response.getSlot().getRequestId()));
+ //requestData的取值正确
+ Assert.assertEquals("it's implicit subflow.", response.getContextBean().getData("innerRequest"));
}
}
diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
index fd78c106..68926cd4 100644
--- a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
+++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
@@ -1,12 +1,17 @@
package com.yomahub.liteflow.test.subflow.cmp2;
import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
+
import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowTest.RUN_TIME_SLOT;
public class HCmp extends NodeComponent {
@Override
public void process() throws Exception {
+ String requestData = this.getSubChainReqData();
+ DefaultContext context = this.getContextBean();
+ context.setData("innerRequest", requestData);
RUN_TIME_SLOT.add(this.getSlot().getRequestId());
diff --git a/liteflow-testcase-script-groovy/pom.xml b/liteflow-testcase-script-groovy/pom.xml
index 464dab8d..5cb568db 100644
--- a/liteflow-testcase-script-groovy/pom.xml
+++ b/liteflow-testcase-script-groovy/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-script-qlexpress/pom.xml b/liteflow-testcase-script-qlexpress/pom.xml
index d77ce0fa..16821510 100644
--- a/liteflow-testcase-script-qlexpress/pom.xml
+++ b/liteflow-testcase-script-qlexpress/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-springboot/pom.xml b/liteflow-testcase-springboot/pom.xml
index e6030a3b..7bad9704 100644
--- a/liteflow-testcase-springboot/pom.xml
+++ b/liteflow-testcase-springboot/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
index ea9af06f..fa014d72 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringbootTest.java
@@ -45,5 +45,7 @@ public class ImplicitSubFlowSpringbootTest extends BaseTest {
Assert.assertEquals(1, RUN_TIME_SLOT.size());
// set中第一次设置的requestId和response中的requestId一致
Assert.assertTrue(RUN_TIME_SLOT.contains(response.getSlot().getRequestId()));
+ //requestData的取值正确
+ Assert.assertEquals("it's implicit subflow.", response.getContextBean().getData("innerRequest"));
}
}
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/FCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/FCmp.java
index 0518434c..3d88daa5 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/FCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/FCmp.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.subflow.cmp2;
import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
import org.springframework.stereotype.Component;
import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RUN_TIME_SLOT;
@@ -10,9 +11,7 @@ import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RU
public class FCmp extends NodeComponent {
@Override
public void process() throws Exception {
-
RUN_TIME_SLOT.add(this.getSlot().getRequestId());
-
System.out.println("Fcomp executed!");
}
}
diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
index 176ea0b3..292ccd82 100644
--- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
+++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.subflow.cmp2;
import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
import org.springframework.stereotype.Component;
import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RUN_TIME_SLOT;
@@ -10,6 +11,9 @@ import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringbootTest.RU
public class HCmp extends NodeComponent {
@Override
public void process() throws Exception {
+ String requestData = this.getSubChainReqData();
+ DefaultContext context = this.getContextBean();
+ context.setData("innerRequest", requestData);
RUN_TIME_SLOT.add(this.getSlot().getRequestId());
diff --git a/liteflow-testcase-springnative/pom.xml b/liteflow-testcase-springnative/pom.xml
index 8d954e89..e4ac2cda 100644
--- a/liteflow-testcase-springnative/pom.xml
+++ b/liteflow-testcase-springnative/pom.xml
@@ -5,7 +5,7 @@
liteflow
com.yomahub
- 2.7.1
+ 2.7.2
4.0.0
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringTest.java
index f4b712a8..7889d7cb 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringTest.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/ImplicitSubFlowSpringTest.java
@@ -39,5 +39,7 @@ public class ImplicitSubFlowSpringTest extends BaseTest {
Assert.assertEquals(1, RUN_TIME_SLOT.size());
// set中第一次设置的requestId和response中的requestId一致
Assert.assertTrue(RUN_TIME_SLOT.contains(response.getSlot().getRequestId()));
+ //requestData的取值正确
+ Assert.assertEquals("it's implicit subflow.", response.getContextBean().getData("innerRequest"));
}
}
diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
index 84688b17..1d05d750 100644
--- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
+++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/subflow/cmp2/HCmp.java
@@ -1,6 +1,7 @@
package com.yomahub.liteflow.test.subflow.cmp2;
import com.yomahub.liteflow.core.NodeComponent;
+import com.yomahub.liteflow.slot.DefaultContext;
import org.springframework.stereotype.Component;
import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringTest.RUN_TIME_SLOT;
@@ -10,6 +11,9 @@ import static com.yomahub.liteflow.test.subflow.ImplicitSubFlowSpringTest.RUN_TI
public class HCmp extends NodeComponent {
@Override
public void process() throws Exception {
+ String requestData = this.getSubChainReqData();
+ DefaultContext context = this.getContextBean();
+ context.setData("innerRequest", requestData);
RUN_TIME_SLOT.add(this.getSlot().getRequestId());
diff --git a/pom.xml b/pom.xml
index 14f3adf5..41e2d2b5 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.yomahub
liteflow
pom
- 2.7.1
+ 2.7.2
liteflow
a lightweight and practical micro-process framework
https://github.com/bryan31/liteflow