diff --git a/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/CommonBenchmark.java b/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/CommonBenchmark.java index 7d770b5dd..6fb2d746b 100644 --- a/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/CommonBenchmark.java +++ b/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/CommonBenchmark.java @@ -50,6 +50,11 @@ public class CommonBenchmark { flowExecutor.execute2Resp("chain2"); } + @Benchmark + public void test3(){ + flowExecutor.execute2Resp("chain3"); + } + public static void main(String[] args) throws RunnerException { Options opt = new OptionsBuilder() diff --git a/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/cmp/DCmp.java b/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/cmp/DCmp.java new file mode 100644 index 000000000..35ee84388 --- /dev/null +++ b/liteflow-benchmark/liteflow-benchmark-common/src/test/java/com/yomahub/liteflow/benchmark/cmp/DCmp.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.benchmark.cmp; + +import cn.hutool.core.collection.ListUtil; +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeIteratorComponent; + +import java.util.Iterator; + +@LiteflowComponent("d") +public class DCmp extends NodeIteratorComponent { + @Override + public Iterator processIterator() throws Exception { + return ListUtil.toList("1","2","3").iterator(); + } +} diff --git a/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/application.properties b/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/application.properties index 55dc0b1ec..deb56e3f8 100644 --- a/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/application.properties +++ b/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/application.properties @@ -1,2 +1,5 @@ liteflow.rule-source=flow.xml -liteflow.print-execution-log=false \ No newline at end of file +liteflow.print-execution-log=false + +liteflow.global-thread-pool-size=500 +liteflow.global-thread-pool-queue-size=1000 \ No newline at end of file diff --git a/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/flow.xml b/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/flow.xml index 14bd071aa..38c7afc0d 100644 --- a/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/flow.xml +++ b/liteflow-benchmark/liteflow-benchmark-common/src/test/resources/flow.xml @@ -30,4 +30,8 @@ THEN(a,b,s1); + + + ITERATOR(d).parallel(true).DO(THEN(a,b,c)); + \ No newline at end of file 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 be886421e..1d6b00b54 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 @@ -576,7 +576,8 @@ public class FlowExecutor { List routeTupleList = new ArrayList<>(); for (Chain routeChain : routeChainList){ CompletableFuture f = CompletableFuture.supplyAsync( - () -> doExecute(routeChain.getChainId(), param, finalRequestId, contextBeanClazzArray, contextBeanArray, null, InnerChainTypeEnum.NONE, ChainExecuteModeEnum.ROUTE) + () -> doExecute(routeChain.getChainId(), param, finalRequestId, contextBeanClazzArray, contextBeanArray, null, InnerChainTypeEnum.NONE, ChainExecuteModeEnum.ROUTE), + ExecutorHelper.loadInstance().buildWhenExecutor() ); routeTupleList.add(new Tuple(routeChain, f)); @@ -612,7 +613,8 @@ public class FlowExecutor { List> executeChainCfList = new ArrayList<>(); for (Chain chain : matchedRouteChainList){ CompletableFuture cf = CompletableFuture.supplyAsync( - () -> doExecute(chain.getChainId(), param, finalRequestId, contextBeanClazzArray, contextBeanArray, null, InnerChainTypeEnum.NONE, ChainExecuteModeEnum.BODY) + () -> doExecute(chain.getChainId(), param, finalRequestId, contextBeanClazzArray, contextBeanArray, null, InnerChainTypeEnum.NONE, ChainExecuteModeEnum.BODY), + ExecutorHelper.loadInstance().buildWhenExecutor() ); executeChainCfList.add(cf); } 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 4210f5e14..d43a8b1b8 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 @@ -99,6 +99,8 @@ public abstract class NodeComponent{ stopWatch.start(); try { + LOG.info("[O]start component[{}] execution", self.getDisplayName()); + // 前置处理 self.beforeProcess(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java index 001f2bbcb..5c61738fc 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Condition.java @@ -14,6 +14,7 @@ import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.enums.ConditionTypeEnum; import com.yomahub.liteflow.enums.ExecuteableTypeEnum; import com.yomahub.liteflow.exception.ChainEndException; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.flow.element.condition.ConditionKey; import com.yomahub.liteflow.slot.DataBus; import com.yomahub.liteflow.slot.Slot; @@ -116,6 +117,8 @@ public abstract class Condition implements Executable{ executableList.forEach(executable -> { if (executable instanceof Condition){ resultList.addAll(((Condition)executable).getAllNodeInCondition()); + }else if(executable instanceof Chain){ + resultList.addAll(FlowBus.getNodesByChainId(executable.getId())); }else if(executable instanceof Node){ resultList.add((Node)executable); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java index 82416f9d3..225163b70 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Node.java @@ -180,8 +180,6 @@ public class Node implements Executable, Cloneable, Rollbackable{ // 判断是否可执行,所以isAccess经常作为一个组件进入的实际判断要素,用作检查slot里的参数的完备性 if (getAccessResult() || instance.isAccess()) { - LOG.info("[O]start component[{}] execution", instance.getDisplayName()); - // 这里开始进行重试的逻辑和主逻辑的运行 NodeExecutor nodeExecutor = NodeExecutorHelper.loadInstance() .buildNodeExecutor(instance.getNodeExecutorClass()); diff --git a/liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java b/liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java index 24a0a94a8..91a9a0b52 100644 --- a/liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java +++ b/liteflow-script-plugin/liteflow-script-javax/src/main/java/com/yomahub/liteflow/script/javax/JavaxExecutor.java @@ -94,7 +94,7 @@ public class JavaxExecutor extends ScriptExecutor { .replaceAll("protected class", "class"); //分析出class的具体名称 - String className = ReUtil.getGroup1("class\\s+(\\w+)\\s+implements", script1); + String className = ReUtil.getGroup1("class\\s+(\\w+)\\s+(implements|extends)", script1); if (StrUtil.isBlank(className)){ throw new RuntimeException("cannot find class defined"); diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/DemoClass.java b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/DemoClass.java new file mode 100644 index 000000000..5af556d28 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/DemoClass.java @@ -0,0 +1,8 @@ +package com.yomahub.liteflow.test.script.javax.scriptExtends; + +public class DemoClass { + + public String sayHello(String name) { + return "hello " + name; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/ScriptJavaxScriptExtendsELTest.java b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/ScriptJavaxScriptExtendsELTest.java new file mode 100644 index 000000000..0ee2da21d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/script/javax/scriptExtends/ScriptJavaxScriptExtendsELTest.java @@ -0,0 +1,33 @@ +package com.yomahub.liteflow.test.script.javax.scriptExtends; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.slot.DefaultContext; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.annotation.Resource; + +@ExtendWith(SpringExtension.class) +@TestPropertySource(value = "classpath:/scriptExtends/application.properties") +@SpringBootTest(classes = ScriptJavaxScriptExtendsELTest.class) +@EnableAutoConfiguration +public class ScriptJavaxScriptExtendsELTest extends BaseTest { + + @Resource + private FlowExecutor flowExecutor; + + // 测试普通脚本节点 + @Test + public void testCommon1() { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assertions.assertTrue(response.isSuccess()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/application.properties b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/application.properties new file mode 100644 index 000000000..1cc85acb3 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/application.properties @@ -0,0 +1,2 @@ +liteflow.rule-source=scriptExtends/flow.xml +liteflow.script-setting.javax-is-cache=false \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/flow.xml b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/flow.xml new file mode 100644 index 000000000..1cd5aee94 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/resources/scriptExtends/flow.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + THEN(s1); + + \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/GetNodesELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/GetNodesELSpringbootTest.java new file mode 100644 index 000000000..de2f6586d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/GetNodesELSpringbootTest.java @@ -0,0 +1,55 @@ +package com.yomahub.liteflow.test.getnodes; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.flow.LiteflowResponse; +import com.yomahub.liteflow.flow.element.Node; +import com.yomahub.liteflow.test.BaseTest; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.test.context.TestPropertySource; + +import javax.annotation.Resource; +import java.util.List; + +/** + * springboot环境FlowBus.getNodesByChainId的例子测试 + * + * @author Bryan.Zhang + */ +@TestPropertySource(value = "classpath:/getnodes/application.properties") +@SpringBootTest(classes = GetNodesELSpringbootTest.class) +@EnableAutoConfiguration +@ComponentScan({ "com.yomahub.liteflow.test.getnodes.cmp" }) +public class GetNodesELSpringbootTest extends BaseTest { + + // 从简单到复杂 + @Test + public void testGetNodes1() throws Exception { + List nodeList1 = FlowBus.getNodesByChainId("chain1"); + Assertions.assertEquals(4, nodeList1.size()); + List nodeList2 = FlowBus.getNodesByChainId("chain2"); + Assertions.assertEquals(5, nodeList2.size()); + List nodeList3 = FlowBus.getNodesByChainId("chain3"); + Assertions.assertEquals(7, nodeList3.size()); + List nodeList4 = FlowBus.getNodesByChainId("chain4"); + Assertions.assertEquals(15, nodeList4.size()); + } + + // 测试有子变量的情况 + @Test + public void testGetNodes2() throws Exception { + List nodeList = FlowBus.getNodesByChainId("chain5"); + Assertions.assertEquals(15, nodeList.size()); + } + + // 测试有子chain的情况 + @Test + public void testGetNodes3() throws Exception { + List nodeList = FlowBus.getNodesByChainId("chain6"); + Assertions.assertEquals(6, nodeList.size()); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ACmp.java new file mode 100644 index 000000000..3e4aa15e6 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ACmp.java @@ -0,0 +1,20 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("a") +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/BCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/BCmp.java new file mode 100644 index 000000000..35439da98 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/BCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("b") +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/CCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/CCmp.java new file mode 100644 index 000000000..7c4f27e39 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/CCmp.java @@ -0,0 +1,26 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("c") +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + + @Override + public boolean isAccess() { + System.out.println("hello"); + return true; + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/DCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/DCmp.java new file mode 100644 index 000000000..79e822b56 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/DCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("d") +public class DCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("DCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ESwitchCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ESwitchCmp.java new file mode 100644 index 000000000..a09270743 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ESwitchCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import org.springframework.stereotype.Component; + +@Component("e") +public class ESwitchCmp extends NodeSwitchComponent { + + @Override + public String processSwitch() throws Exception { + return "d"; + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/FCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/FCmp.java new file mode 100644 index 000000000..49bfb87ab --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/FCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("f") +public class FCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("FCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/GSwitchCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/GSwitchCmp.java new file mode 100644 index 000000000..9989f3659 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/GSwitchCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import org.springframework.stereotype.Component; + +@Component("g") +public class GSwitchCmp extends NodeSwitchComponent { + + @Override + public String processSwitch() throws Exception { + return "then_1001"; + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/HCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/HCmp.java new file mode 100644 index 000000000..6f41aab33 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/HCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("h") +public class HCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("HCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ICmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ICmp.java new file mode 100644 index 000000000..31548031a --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ICmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("i") +public class ICmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ICmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/JCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/JCmp.java new file mode 100644 index 000000000..f659ee468 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/JCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("j") +public class JCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("JCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/KCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/KCmp.java new file mode 100644 index 000000000..089df1b8d --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/KCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("k") +public class KCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("KCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/MCmp.java new file mode 100644 index 000000000..fd0ff639e --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/MCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("m") +public class MCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("MCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/NCmp.java new file mode 100644 index 000000000..26d47daea --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/NCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("n") +public class NCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("NCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/PCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/PCmp.java new file mode 100644 index 000000000..219997dde --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/PCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("p") +public class PCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("PCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/QCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/QCmp.java new file mode 100644 index 000000000..f1b3887a7 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/QCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("q") +public class QCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("QCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/RCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/RCmp.java new file mode 100644 index 000000000..97c5fb258 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/RCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("r") +public class RCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("RCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/XSwitchCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/XSwitchCmp.java new file mode 100644 index 000000000..af5165873 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/XSwitchCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeSwitchComponent; +import org.springframework.stereotype.Component; + +@Component("x") +public class XSwitchCmp extends NodeSwitchComponent { + + @Override + public String processSwitch() throws Exception { + return "w01"; + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ZCmp.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ZCmp.java new file mode 100644 index 000000000..17e7700a9 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/getnodes/cmp/ZCmp.java @@ -0,0 +1,21 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.getnodes.cmp; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("z") +public class ZCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ZCmp executed!"); + } + +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/parallelLoop/ParallelLoopELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/parallelLoop/ParallelLoopELSpringbootTest.java index 9332d19e6..3724d5259 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/parallelLoop/ParallelLoopELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/parallelLoop/ParallelLoopELSpringbootTest.java @@ -38,8 +38,12 @@ public class ParallelLoopELSpringbootTest extends BaseTest { //测试并行FOR循环,循环次数直接在el中定义 @Test public void testParallelLoop1() throws Exception { - LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); - Assertions.assertTrue(response.isSuccess()); + + for (int i = 0; i < 10; i++) { + LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg"); + Assertions.assertTrue(response.isSuccess()); + } + } //测试并行FOR循环,循环次数由For组件定义 diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/application.properties b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/application.properties new file mode 100644 index 000000000..b26c1c9c1 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/application.properties @@ -0,0 +1 @@ +liteflow.rule-source=getnodes/flow.el.xml \ No newline at end of file diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/flow.el.xml b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/flow.el.xml new file mode 100644 index 000000000..d36747bbe --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/resources/getnodes/flow.el.xml @@ -0,0 +1,58 @@ + + + + + THEN(a,b,b,a); + + + + THEN( + a,b, + SWITCH(e).to(d,f) + ); + + + + THEN( + a, + WHEN( + c, + SWITCH(g).to(b, d, THEN(h,i).id("then_1001")) + ) + ); + + + + THEN( + a,b, + WHEN( + THEN(c, WHEN(j,k)), + d, + THEN(h, i) + ), + SWITCH(x).to( + m, + n, + WHEN(q, THEN(p, r)).id("w01") + ), + z + ); + + + + t1 = THEN(c, WHEN(j,k)); + w1 = WHEN(q, THEN(p, r)).id("w01"); + t2 = THEN(h, i); + + THEN( + a,b, + WHEN(t1, d, t2 ), + SWITCH(x).to(m, n, w1), + z + ); + + + + THEN(j,k,chain1); + + \ No newline at end of file