enhancement #I4TGGV 子流程中的finally节点没有执行

This commit is contained in:
everywhere.z
2022-06-12 17:57:47 +08:00
parent aaaef76142
commit b248bbd63c
10 changed files with 77 additions and 15 deletions

View File

@@ -385,8 +385,6 @@ public class FlowExecutor {
String errorMsg = StrUtil.format("[{}]:couldn't find chain with the id[{}]", slot.getRequestId(), chainId);
throw new ChainNotFoundException(errorMsg);
}
// 执行前置
chain.executePre(slotIndex);
// 执行chain
chain.execute(slotIndex);
} catch (ChainEndException e) {
@@ -401,15 +399,6 @@ public class FlowExecutor {
}
slot.setException(e);
} finally {
try{
if (ObjectUtil.isNotNull(chain)){
chain.executeFinally(slotIndex);
}
}catch (Exception e){
String errMsg = StrUtil.format("[{}]:an exception occurred during the finally Component execution in chain[{}]", slot.getRequestId(), chain.getChainName());
LOG.error(errMsg, e);
}
if (!isInnerChain) {
slot.printStep();
DataBus.releaseSlot(slotIndex);

View File

@@ -10,6 +10,8 @@ package com.yomahub.liteflow.flow.element;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.yomahub.liteflow.exception.ChainEndException;
import com.yomahub.liteflow.flow.FlowBus;
import com.yomahub.liteflow.slot.DataBus;
import com.yomahub.liteflow.slot.Slot;
import com.yomahub.liteflow.flow.parallel.CompletableFutureTimeout;
@@ -73,19 +75,36 @@ public class Chain implements Executable {
if (CollUtil.isEmpty(conditionList)) {
throw new FlowSystemException("no conditionList in this chain[" + chainName + "]");
}
for (Condition condition : conditionList) {
condition.execute(slotIndex);
try {
//执行前置
this.executePre(slotIndex);
//执行主体Condition
for (Condition condition : conditionList) {
condition.execute(slotIndex);
}
}catch (ChainEndException e){
//这里单独catch ChainEndException是因为ChainEndException是用户自己setIsEnd抛出的异常
//是属于正常逻辑所以会在FlowExecutor中判断。这里不作为异常处理
throw e;
}catch (Exception e){
//这里事先取到exception set到slot里为了方便finally取到exception
Slot<?> slot = DataBus.getSlot(slotIndex);
slot.setException(e);
throw e;
}finally {
//执行后置
this.executeFinally(slotIndex);
}
}
// 执行pre节点
public void executePre(Integer slotIndex) throws Exception {
private void executePre(Integer slotIndex) throws Exception {
for (Condition condition : this.preConditionList){
condition.execute(slotIndex);
}
}
public void executeFinally(Integer slotIndex) throws Exception {
private void executeFinally(Integer slotIndex) throws Exception {
for (Condition condition : this.finallyConditionList){
condition.execute(slotIndex);
}