!274 提供在切面处设置 isContinueOnError 参数方法

Merge pull request !274 from luoyi/issues/I91AUT
This commit is contained in:
铂赛东
2024-03-08 05:01:37 +00:00
committed by Gitee
7 changed files with 230 additions and 10 deletions

View File

@@ -12,21 +12,22 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.ttl.TransmittableThreadLocal;
import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil;
import com.yomahub.liteflow.enums.CmpStepTypeEnum;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.flow.LiteflowResponse;
import com.yomahub.liteflow.flow.element.Node;
import com.yomahub.liteflow.flow.executor.NodeExecutor;
import com.yomahub.liteflow.flow.entity.CmpStep;
import com.yomahub.liteflow.flow.executor.DefaultNodeExecutor;
import com.yomahub.liteflow.enums.NodeTypeEnum;
import com.yomahub.liteflow.flow.executor.NodeExecutor;
import com.yomahub.liteflow.log.LFLog;
import com.yomahub.liteflow.log.LFLoggerManager;
import com.yomahub.liteflow.spi.holder.CmpAroundAspectHolder;
import com.yomahub.liteflow.util.JsonUtil;
import com.yomahub.liteflow.flow.entity.CmpStep;
import com.yomahub.liteflow.enums.CmpStepTypeEnum;
import com.yomahub.liteflow.slot.DataBus;
import com.yomahub.liteflow.slot.Slot;
import com.yomahub.liteflow.monitor.CompStatistics;
import com.yomahub.liteflow.monitor.MonitorBus;
import com.yomahub.liteflow.slot.DataBus;
import com.yomahub.liteflow.slot.Slot;
import com.yomahub.liteflow.spi.holder.CmpAroundAspectHolder;
import com.yomahub.liteflow.util.JsonUtil;
import java.lang.reflect.Method;
import java.util.Date;
@@ -34,6 +35,7 @@ import java.util.Date;
* 普通组件抽象类
*
* @author Bryan.Zhang
* @author luo yi
*/
public abstract class NodeComponent{
@@ -236,6 +238,10 @@ public abstract class NodeComponent{
this.refNodeTL.get().setIsEnd(isEnd);
}
public void setIsContinueOnError(boolean isContinueOnError) {
this.refNodeTL.get().setIsContinueOnErrorResult(isContinueOnError);
}
public Integer getSlotIndex() {
return this.refNodeTL.get().getSlotIndex();
}

View File

@@ -71,6 +71,9 @@ public class Node implements Executable, Cloneable, Rollbackable{
// 是否结束整个流程,这个只对串行流程有效,并行流程无效
private TransmittableThreadLocal<Boolean> isEndTL = new TransmittableThreadLocal<>();
// isContinueOnError 结果
private TransmittableThreadLocal<Boolean> isContinueOnErrorResult = new TransmittableThreadLocal<>();
public Node() {
}
@@ -168,7 +171,7 @@ public class Node implements Executable, Cloneable, Rollbackable{
throw new ChainEndException(errorInfo);
}
// 如果组件覆盖了isContinueOnError方法返回为true那即便出了异常也会继续流程
else if (instance.isContinueOnError()) {
else if (getIsContinueOnErrorResult() || instance.isContinueOnError()) {
String errorMsg = StrUtil.format("component[{}] cause error,but flow is still go on", id);
LOG.error(errorMsg);
}
@@ -185,6 +188,7 @@ public class Node implements Executable, Cloneable, Rollbackable{
removeIsEnd();
removeLoopIndex();
removeAccessResult();
removeIsContinueOnErrorResult();
}
}
@@ -262,7 +266,7 @@ public class Node implements Executable, Cloneable, Rollbackable{
public boolean getAccessResult() {
Boolean result = this.accessResult.get();
return result == null ? false : result;
return result != null && result;
}
public void setAccessResult(boolean accessResult) {
@@ -273,6 +277,19 @@ public class Node implements Executable, Cloneable, Rollbackable{
this.accessResult.remove();
}
public boolean getIsContinueOnErrorResult() {
Boolean result = this.isContinueOnErrorResult.get();
return result != null && result;
}
public void setIsContinueOnErrorResult(boolean accessResult) {
this.isContinueOnErrorResult.set(accessResult);
}
public void removeIsContinueOnErrorResult() {
this.isContinueOnErrorResult.remove();
}
public void setLoopIndex(int index) {
this.loopIndexTL.set(index);
}
@@ -342,6 +359,7 @@ public class Node implements Executable, Cloneable, Rollbackable{
node.accessResult = new TransmittableThreadLocal<>();
node.slotIndexTL = new TransmittableThreadLocal<>();
node.isEndTL = new TransmittableThreadLocal<>();
node.isContinueOnErrorResult = new TransmittableThreadLocal<>();
return node;
}
}