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 7fcdd1d79..5d8c81c70 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 @@ -35,6 +35,7 @@ import com.yomahub.liteflow.monitor.MonitorBus; import java.lang.reflect.Method; import java.util.Deque; import java.util.Map; +import java.util.function.Predicate; /** * 普通组件抽象类 @@ -158,13 +159,12 @@ public abstract class NodeComponent { public void doRollback() throws Exception { Slot slot = this.getSlot(); - Deque rollbackSteps = slot.getRollbackSteps(); - if(!CollUtil.isEmpty(rollbackSteps)) { - for (CmpStep rollbackStep : rollbackSteps) { - Node refNode = rollbackStep.getRefNode(); - if(refNode == this.getRefNode()) return; - } + + boolean alreadyRollback = slot.getRollbackSteps().stream().anyMatch(cmpStep -> cmpStep.getRefNode().equals(getRefNode())); + if (alreadyRollback){ + return; } + CmpStep cmpStep = new CmpStep(nodeId, name, CmpStepTypeEnum.SINGLE); cmpStep.setTag(this.getTag()); cmpStep.setInstance(this); diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java new file mode 100644 index 000000000..975de743c --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java @@ -0,0 +1,25 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("m") +@LiteflowRetry(5) +public class MCmp extends NodeComponent { + + private int flag = 0; + @Override + public void process() { + if(flag < 2) { + flag ++; + throw new RuntimeException(); + } + System.out.println("MCmp executed!"); + } + + @Override + public void rollback() throws Exception { + System.out.println("MCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java new file mode 100644 index 000000000..65d509968 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java @@ -0,0 +1,20 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("n") +@LiteflowRetry(3) +public class NCmp extends NodeComponent { + @Override + public void process() { + System.out.println("NCmp executed!"); + throw new RuntimeException(); + } + + @Override + public void rollback() throws Exception { + System.out.println("NCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java new file mode 100644 index 000000000..da538e236 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/MCmp.java @@ -0,0 +1,23 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowRetry(5) +public class MCmp extends NodeComponent { + + private int flag = 0; + @Override + public void process() { + if(flag < 2) { + flag ++; + throw new RuntimeException(); + } + System.out.println("MCmp executed!"); + } + + @Override + public void rollback() throws Exception { + System.out.println("MCmp rollback!"); + } +} diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java new file mode 100644 index 000000000..66d51ef08 --- /dev/null +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/rollback/cmp/NCmp.java @@ -0,0 +1,18 @@ +package com.yomahub.liteflow.test.rollback.cmp; + +import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.core.NodeComponent; + +@LiteflowRetry(3) +public class NCmp extends NodeComponent { + @Override + public void process() { + System.out.println("NCmp executed!"); + throw new RuntimeException(); + } + + @Override + public void rollback() throws Exception { + System.out.println("NCmp rollback!"); + } +}