diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java index 091e39f88..91ba7717a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/aop/ICmpAroundAspect.java @@ -22,4 +22,8 @@ public interface ICmpAroundAspect { void afterProcess(NodeComponent cmp); + void onSuccess(NodeComponent cmp); + + void onError(NodeComponent cmp, Exception e); + } 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 99f242bf7..146a11a2e 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 @@ -110,17 +110,6 @@ public abstract class NodeComponent { cmpStep.setSuccess(false); cmpStep.setException(e); - if (!(e instanceof ChainEndException)){ - String chainId = this.getCurrChainId(); - // 这里事先取到exception set到slot里,为了方便finally取到exception - if (slot.isSubChain(chainId)) { - slot.setSubException(chainId, e); - } - else { - slot.setException(e); - } - } - // 执行失败后回调方法 // 这里要注意,失败方法本身抛出错误,只打出堆栈,往外抛出的还是主要的异常 try { @@ -161,10 +150,16 @@ public abstract class NodeComponent { public void onSuccess() throws Exception { // 如果需要在成功后回调某一个方法,请覆盖这个方法 + // 全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类 + // 非spring环境下,全局切面为空实现 + CmpAroundAspectHolder.loadCmpAroundAspect().onSuccess(this.self); } public void onError(Exception e) throws Exception { // 如果需要在抛错后回调某一段逻辑,请覆盖这个方法 + // 全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类 + // 非spring环境下,全局切面为空实现 + CmpAroundAspectHolder.loadCmpAroundAspect().onError(this.self, e); } public void afterProcess() { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java index 3fe938217..6f2c724d4 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java @@ -15,4 +15,8 @@ public interface CmpAroundAspect extends SpiPriority { void afterProcess(NodeComponent cmp); + void onSuccess(NodeComponent cmp); + + void onError(NodeComponent cmp, Exception e); + } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java index c783985ba..4d603aa25 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java @@ -22,6 +22,16 @@ public class LocalCmpAroundAspect implements CmpAroundAspect { // 无spring环境下为空实现 } + @Override + public void onSuccess(NodeComponent cmp) { + // 无spring环境下为空实现 + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + // 无spring环境下为空实现 + } + @Override public int priority() { return 2; diff --git a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonCmpAroundAspect.java b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonCmpAroundAspect.java index 9b3f88f5a..f4ec24eb6 100644 --- a/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonCmpAroundAspect.java +++ b/liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonCmpAroundAspect.java @@ -37,6 +37,20 @@ public class SolonCmpAroundAspect implements CmpAroundAspect { } } + @Override + public void onSuccess(NodeComponent cmp) { + if (ObjectUtil.isNotNull(cmpAroundAspect)) { + cmpAroundAspect.onSuccess(cmp); + } + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + if (ObjectUtil.isNotNull(cmpAroundAspect)) { + cmpAroundAspect.onError(cmp, e); + } + } + @Override public int priority() { return 1; diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java index b2686ca33..b0a201b57 100644 --- a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java @@ -28,6 +28,20 @@ public class SpringCmpAroundAspect implements CmpAroundAspect { } } + @Override + public void onSuccess(NodeComponent cmp) { + if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { + ComponentScanner.cmpAroundAspect.onSuccess(cmp); + } + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { + ComponentScanner.cmpAroundAspect.onError(cmp, e); + } + } + @Override public int priority() { return 1; diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclMultiSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclMultiSpringbootTest.java index 781088820..dfbe5c3ed 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclMultiSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclMultiSpringbootTest.java @@ -72,6 +72,7 @@ public class GlobalAOPELDeclMultiSpringbootTest extends BaseTest { Assertions.assertEquals("before_after", context.getData("b")); Assertions.assertEquals("before_after", context.getData("c")); Assertions.assertEquals("before_after", context.getData("f")); + Assertions.assertEquals("test error", context.getData("f_error")); } @AfterAll diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index 82a3464f9..faccdabee 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -20,4 +20,15 @@ public class CmpAspect implements ICmpAroundAspect { context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); } + @Override + public void onSuccess(NodeComponent cmp) { + + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + DefaultContext context = cmp.getFirstContextBean(); + context.setData(cmp.getNodeId()+"_error", e.getMessage()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclSpringbootTest.java index aa85b864f..bbc4c63db 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELDeclSpringbootTest.java @@ -71,6 +71,7 @@ public class GlobalAOPELDeclSpringbootTest extends BaseTest { Assertions.assertEquals("before_after", context.getData("b")); Assertions.assertEquals("before_after", context.getData("c")); Assertions.assertEquals("before_after", context.getData("f")); + Assertions.assertEquals("test error", context.getData("f_error")); } @AfterAll diff --git a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index 82a3464f9..faccdabee 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -20,4 +20,15 @@ public class CmpAspect implements ICmpAroundAspect { context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); } + @Override + public void onSuccess(NodeComponent cmp) { + + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + DefaultContext context = cmp.getFirstContextBean(); + context.setData(cmp.getNodeId()+"_error", e.getMessage()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java index e5fd72319..ec1bb4436 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringbootTest.java @@ -66,7 +66,9 @@ public class GlobalAOPELSpringbootTest extends BaseTest { Assertions.assertEquals("before_after", context.getData("a")); Assertions.assertEquals("before_after", context.getData("b")); Assertions.assertEquals("before_after", context.getData("c")); - Assertions.assertEquals("test error", context.getData("f")); + Assertions.assertEquals("before_after", context.getData("f")); + Assertions.assertEquals("test error", context.getData("f_error")); + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index 6e38b6372..88694427a 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -18,12 +18,18 @@ public class CmpAspect implements ICmpAroundAspect { @Override public void afterProcess(NodeComponent cmp) { DefaultContext context = cmp.getFirstContextBean(); - if (ObjectUtil.isNotNull(cmp.getSlot().getException())){ - context.setData(cmp.getNodeId(), cmp.getSlot().getException().getMessage()); - }else{ - context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); - } + context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); + } + + @Override + public void onSuccess(NodeComponent cmp) { } + @Override + public void onError(NodeComponent cmp, Exception e) { + DefaultContext context = cmp.getFirstContextBean(); + context.setData(cmp.getNodeId()+"_error", e.getMessage()); + } + } diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringTest.java index 32797b95e..581e62e3f 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/GlobalAOPELSpringTest.java @@ -63,6 +63,7 @@ public class GlobalAOPELSpringTest extends BaseTest { Assertions.assertEquals("before_after", context.getData("b")); Assertions.assertEquals("before_after", context.getData("c")); Assertions.assertEquals("before_after", context.getData("f")); + Assertions.assertEquals("test error", context.getData("f_error")); } @AfterAll diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java index 82a3464f9..faccdabee 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/aop/aspect/CmpAspect.java @@ -20,4 +20,15 @@ public class CmpAspect implements ICmpAroundAspect { context.setData(cmp.getNodeId(), StrUtil.format("{}_{}", context.getData(cmp.getNodeId()), "after")); } + @Override + public void onSuccess(NodeComponent cmp) { + + } + + @Override + public void onError(NodeComponent cmp, Exception e) { + DefaultContext context = cmp.getFirstContextBean(); + context.setData(cmp.getNodeId()+"_error", e.getMessage()); + } + }