From 9f304d2c9e9f013743795b60e4507e6b6ea87b07 Mon Sep 17 00:00:00 2001 From: tangjing Date: Fri, 12 Apr 2024 18:08:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=9C=A8CmpStep=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E5=AD=98=E5=8F=96=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/core/NodeComponent.java | 17 +++++++++++++++-- .../com/yomahub/liteflow/flow/element/Node.java | 13 +++++++++++++ .../yomahub/liteflow/flow/entity/CmpStep.java | 11 +++++++++++ .../liteflow/test/cmpStep/CmpStepTest.java | 9 +++++++++ .../yomahub/liteflow/test/cmpStep/cmp/ACmp.java | 1 + 5 files changed, 49 insertions(+), 2 deletions(-) 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 02140db44..9356a52a7 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 @@ -30,6 +30,7 @@ import com.yomahub.liteflow.util.JsonUtil; import java.lang.reflect.Method; import java.util.Date; +import java.util.Objects; /** * 普通组件抽象类 @@ -136,9 +137,8 @@ public abstract class NodeComponent{ stopWatch.stop(); final long timeSpent = stopWatch.getTotalTimeMillis(); LOG.info("component[{}] finished in {} milliseconds", this.getDisplayName(), timeSpent); - + cmpStep.setStepData(getStepDataAndClean()); cmpStep.setEndTime(new Date()); - // 往CmpStep中放入时间消耗信息 cmpStep.setTimeSpent(timeSpent); @@ -150,6 +150,16 @@ public abstract class NodeComponent{ } } + private Object getStepDataAndClean(){ + Node node = self.refNodeTL.get(); + Object stepData = null; + if(Objects.nonNull(node)){ + stepData = node.getStepData(); + node.removeStepData(); + } + return stepData; + } + public void doRollback() throws Exception { Slot slot = this.getSlot(); @@ -415,6 +425,9 @@ public abstract class NodeComponent{ return this.refNodeTL.get().getCurrLoopObject(); } + public void setNodeData(Object nodeData) { + this.refNodeTL.get().setStepData(nodeData); + } @Deprecated public void invoke(String chainId, Object param) throws Exception { FlowExecutorHolder.loadInstance().invoke(chainId, param, this.getSlotIndex()); 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 3659586e8..cffcc5523 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 @@ -55,6 +55,8 @@ public class Node implements Executable, Cloneable, Rollbackable{ private String cmpData; private String currChainId; + // 当前节点缓存的数据 + private TransmittableThreadLocal stepData = new TransmittableThreadLocal<>(); // node 的 isAccess 结果,主要用于 WhenCondition 的提前 isAccess 判断,避免 isAccess 方法重复执行 private TransmittableThreadLocal accessResult = new TransmittableThreadLocal<>(); @@ -277,6 +279,17 @@ public class Node implements Executable, Cloneable, Rollbackable{ this.accessResult.remove(); } + public T getStepData() { + return (T) this.stepData.get(); + } + + public void setStepData(Object stepData) { + this.stepData.set(stepData); + } + + public void removeStepData() { + this.stepData.remove(); + } public boolean getIsContinueOnErrorResult() { Boolean result = this.isContinueOnErrorResult.get(); return result != null && result; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/entity/CmpStep.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/entity/CmpStep.java index 4bade848e..2915b0d5a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/entity/CmpStep.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/entity/CmpStep.java @@ -53,6 +53,9 @@ public class CmpStep { // 当前执行的node private Node refNode; + // 当前执行node缓存的数据 + private Object stepData; + public CmpStep(String nodeId, String nodeName, CmpStepTypeEnum stepType) { this.nodeId = nodeId; @@ -132,6 +135,14 @@ public class CmpStep { this.refNode = refNode; } + public T getStepData() { + return (T) stepData; + } + + public void setStepData(Object stepData) { + this.stepData = stepData; + } + public String buildString() { if (stepType.equals(CmpStepTypeEnum.SINGLE)) { if (StrUtil.isBlank(nodeName)) { diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/CmpStepTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/CmpStepTest.java index 07e933e24..cbb952f00 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/CmpStepTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/CmpStepTest.java @@ -60,6 +60,15 @@ public class CmpStepTest extends BaseTest { Assertions.assertEquals(3, tagSet.size()); + for (CmpStep cmpStep : response.getExecuteStepQueue()) { + if(cmpStep.getNodeId().equals("a")){ + Assertions.assertEquals("ACmp executed!",cmpStep.getStepData()); + }else { + Assertions.assertNull(cmpStep.getStepData()); + } + } + + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java index 78c125ae9..f45f68b90 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java @@ -14,6 +14,7 @@ public class ACmp extends NodeComponent { @Override public void process() throws Exception { Thread.sleep(5000L); + this.setNodeData("ACmp executed!"); System.out.println("ACmp executed!"); } -- Gitee From 18a4ee21dfefab271486fa75eaaf7f46300f6f4d Mon Sep 17 00:00:00 2001 From: tangjing Date: Fri, 12 Apr 2024 18:13:31 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=9C=A8CmpStep=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A=E4=B9=89=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=9A=84=E5=AD=98=E5=8F=96=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/yomahub/liteflow/core/NodeComponent.java | 4 ++-- .../test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) 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 9356a52a7..1704a31a9 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 @@ -425,8 +425,8 @@ public abstract class NodeComponent{ return this.refNodeTL.get().getCurrLoopObject(); } - public void setNodeData(Object nodeData) { - this.refNodeTL.get().setStepData(nodeData); + public void setStepData(Object stepData) { + this.refNodeTL.get().setStepData(stepData); } @Deprecated public void invoke(String chainId, Object param) throws Exception { diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java index f45f68b90..7286ccb02 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/cmpStep/cmp/ACmp.java @@ -14,7 +14,7 @@ public class ACmp extends NodeComponent { @Override public void process() throws Exception { Thread.sleep(5000L); - this.setNodeData("ACmp executed!"); + this.setStepData("ACmp executed!"); System.out.println("ACmp executed!"); } -- Gitee