diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml index 0c9d49636..f7b5abf82 100644 --- a/liteflow-core/pom.xml +++ b/liteflow-core/pom.xml @@ -9,7 +9,7 @@ com.yomahub liteflow - 2.2.2 + 2.2.3-SNAPSHOT diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 99fbb2d50..6737d97a1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -1,18 +1,15 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-31 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.core; import java.text.MessageFormat; import java.util.List; import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -20,11 +17,8 @@ import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.yomahub.liteflow.entity.config.Chain; -import com.yomahub.liteflow.entity.config.Condition; -import com.yomahub.liteflow.entity.config.Node; -import com.yomahub.liteflow.entity.config.ThenCondition; -import com.yomahub.liteflow.entity.config.WhenCondition; +import com.yomahub.liteflow.entity.flow.Chain; +import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.Slot; @@ -143,49 +137,9 @@ public class FlowExecutor { slot.setChainReqData(chainId, param); } - List conditionList = chain.getConditionList(); + //执行chain + chain.execute(slotIndex); - List nodeList = null; - NodeComponent component = null; - for(Condition condition : conditionList){ - nodeList = condition.getNodeList(); - - if(condition instanceof ThenCondition){ - for(Node node : nodeList){ - component = node.getInstance(); - try{ - component.setSlotIndex(slotIndex); - if(component.isAccess()){ - component.execute(); - if(component.isEnd()) { - LOG.info("[{}]:component[{}] lead the chain to end",slot.getRequestId(),component.getClass().getSimpleName()); - break; - } - }else { - LOG.info("[{}]:[X]skip component[{}] execution",slot.getRequestId(),component.getClass().getSimpleName()); - } - }catch(Exception t){ - if(component.isContinueOnError()){ - String errorMsg = MessageFormat.format("[{0}]:component[{1}] cause error,but flow is still go on", slot.getRequestId(),component.getClass().getSimpleName()); - LOG.error(errorMsg,t); - }else{ - String errorMsg = MessageFormat.format("[{0}]:executor cause error",slot.getRequestId()); - LOG.error(errorMsg,t); - throw t; - } - }finally { - component.removeSlotIndex(); - component.removeIsEnd(); - } - } - }else if(condition instanceof WhenCondition){ - final CountDownLatch latch = new CountDownLatch(nodeList.size()); - for(Node node : nodeList){ - new WhenConditionThread(node,slotIndex,slot.getRequestId(),latch).start(); - } - latch.await(15, TimeUnit.SECONDS); - } - } return (T)slot; }catch(Exception e){ String errorMsg = MessageFormat.format("[{0}]executor cause error", slot.getRequestId()); 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 a81ef0aa1..f2192b87c 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 @@ -1,20 +1,19 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.core; +import com.yomahub.liteflow.entity.flow.Executable; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.StopWatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.yomahub.liteflow.entity.config.Node; +import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.entity.data.CmpStep; import com.yomahub.liteflow.entity.data.CmpStepType; import com.yomahub.liteflow.entity.data.DataBus; @@ -31,6 +30,7 @@ public abstract class NodeComponent { private String nodeId; + //是否结束整个流程,这个只对串行流程有效,并行流程无效 private InheritableThreadLocal isEndTL = new InheritableThreadLocal<>(); public void execute() throws Exception{ @@ -58,11 +58,9 @@ public abstract class NodeComponent { String condNodeId = slot.getCondResult(this.getClass().getName()); if(StringUtils.isNotBlank(condNodeId)){ Node thisNode = FlowBus.getNode(nodeId); - Node condNode = thisNode.getCondNode(condNodeId); - if(condNode != null){ - NodeComponent condComponent = condNode.getInstance(); - condComponent.setSlotIndex(slotIndexTL.get()); - condComponent.execute(); + Executable condExecutor = thisNode.getCondNode(condNodeId); + if(condExecutor != null){ + condExecutor.execute(slotIndexTL.get()); } } } @@ -70,21 +68,21 @@ public abstract class NodeComponent { LOG.debug("[{}]:componnet[{}] finished in {} milliseconds",slot.getRequestId(),this.getClass().getSimpleName(),timeSpent); } - protected abstract void process() throws Exception; + public abstract void process() throws Exception; /** * 是否进入该节点 * @return boolean */ - protected boolean isAccess(){ + public boolean isAccess(){ return true; } /** - * 出错是否继续执行 + * 出错是否继续执行(这个只适用于串行流程,并行节点不起作用) * @return boolean */ - protected boolean isContinueOnError() { + public boolean isContinueOnError() { return false; } @@ -92,7 +90,7 @@ public abstract class NodeComponent { * 是否结束整个流程(不往下继续执行) * @return boolean */ - protected boolean isEnd() { + public boolean isEnd() { Boolean isEnd = isEndTL.get(); if(isEnd == null){ return false; @@ -105,11 +103,11 @@ public abstract class NodeComponent { * 设置是否结束整个流程 * @param isEnd */ - protected void setIsEnd(boolean isEnd){ + public void setIsEnd(boolean isEnd){ this.isEndTL.set(isEnd); } - protected void removeIsEnd(){ + public void removeIsEnd(){ this.isEndTL.remove(); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java index 0cba9c45a..8a248cb85 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeCondComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.core; @@ -14,13 +12,11 @@ import org.springframework.stereotype.Component; public abstract class NodeCondComponent extends NodeComponent { @Override - protected void process() throws Exception { - Class clazz = this.processCond(); - Component component = clazz.getAnnotation(Component.class); - String nodeId = component.value(); + public void process() throws Exception { + String nodeId = this.processCond(); this.getSlot().setCondResult(this.getClass().getName(), nodeId); } - protected abstract Class processCond() throws Exception; + public abstract String processCond() throws Exception; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Chain.java deleted file mode 100644 index 7afd3c83b..000000000 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Chain.java +++ /dev/null @@ -1,40 +0,0 @@ -/** - *

Title: liteFlow

- *

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

- * @author Bryan.Zhang - * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 - */ -package com.yomahub.liteflow.entity.config; - -import java.util.List; - -public class Chain { - - private String chainName; - - private List conditionList; - - public Chain(String chainName, List conditionList) { - this.chainName = chainName; - this.conditionList = conditionList; - } - - public List getConditionList() { - return conditionList; - } - - public void setConditionList(List conditionList) { - this.conditionList = conditionList; - } - - public String getChainName() { - return chainName; - } - - public void setChainName(String chainName) { - this.chainName = chainName; - } -} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Condition.java deleted file mode 100644 index f67d41a57..000000000 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Condition.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - *

Title: liteFlow

- *

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

- * @author Bryan.Zhang - * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 - */ -package com.yomahub.liteflow.entity.config; - -import java.util.List; - -public class Condition { - - private List nodeList; - - public Condition(List nodeList) { - this.nodeList = nodeList; - } - - public List getNodeList() { - return nodeList; - } - - public void setNodeList(List nodeList) { - this.nodeList = nodeList; - } -} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Node.java deleted file mode 100644 index ce8081022..000000000 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/Node.java +++ /dev/null @@ -1,68 +0,0 @@ -/** - *

Title: liteFlow

- *

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

- * @author Bryan.Zhang - * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 - */ -package com.yomahub.liteflow.entity.config; - -import java.util.HashMap; -import java.util.Map; - -import com.yomahub.liteflow.core.NodeComponent; - -public class Node { - - private String id; - - private String clazz; - - private NodeComponent instance; - - private Map condNodeMap = new HashMap(); - - public Node(){ - - } - - public Node(String id, String clazz, NodeComponent instance) { - this.id = id; - this.clazz = clazz; - this.instance = instance; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getClazz() { - return clazz; - } - - public void setClazz(String clazz) { - this.clazz = clazz; - } - - public NodeComponent getInstance() { - return instance; - } - - public void setInstance(NodeComponent instance) { - this.instance = instance; - } - - public Node getCondNode(String nodeId){ - return this.condNodeMap.get(nodeId); - } - - public void setCondNode(String nodeId, Node condNode){ - this.condNodeMap.put(nodeId, condNode); - } -} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java index 85090601e..13fffd663 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/AbsSlot.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-3 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java index c742e3d7a..94344e6ab 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStep.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-12-8 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java index 76673b6fa..7162eadae 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/CmpStepType.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-12-8 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java index 0e16472ef..fbe7820b0 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DataBus.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java index d633d97fa..9096b2a88 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/DefaultSlot.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-12-4 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java index 56d257027..e971d34aa 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/data/Slot.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-12-4 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.data; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java new file mode 100644 index 000000000..83e40037a --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Chain.java @@ -0,0 +1,88 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.entity.flow; + +import com.yomahub.liteflow.entity.data.DataBus; +import com.yomahub.liteflow.entity.data.Slot; +import com.yomahub.liteflow.enums.ExecuteTypeEnum; +import com.yomahub.liteflow.exception.ChainEndException; +import com.yomahub.liteflow.exception.FlowSystemException; +import org.apache.commons.collections4.CollectionUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +public class Chain implements Executable{ + + private static final Logger LOG = LoggerFactory.getLogger(Chain.class); + + private String chainName; + + private List conditionList; + + public Chain(String chainName, List conditionList) { + this.chainName = chainName; + this.conditionList = conditionList; + } + + public List getConditionList() { + return conditionList; + } + + public void setConditionList(List conditionList) { + this.conditionList = conditionList; + } + + public String getChainName() { + return chainName; + } + + public void setChainName(String chainName) { + this.chainName = chainName; + } + + @Override + public void execute(Integer slotIndex) throws Exception{ + if(CollectionUtils.isEmpty(conditionList)){ + throw new FlowSystemException("no conditionList in this chain[" + chainName + "]"); + } + + Slot slot = DataBus.getSlot(slotIndex); + + for (Condition condition : conditionList){ + if(condition instanceof ThenCondition){ + for(Executable executableItem : condition.getNodeList()){ + try{ + executableItem.execute(slotIndex); + }catch (ChainEndException e){ + break; + } + } + }else if(condition instanceof WhenCondition){ + final CountDownLatch latch = new CountDownLatch(condition.getNodeList().size()); + for(Executable executableItem : condition.getNodeList()){ + new WhenConditionThread(executableItem,slotIndex,slot.getRequestId(),latch).start(); + } + latch.await(15, TimeUnit.SECONDS); + } + } + } + + @Override + public ExecuteTypeEnum getExecuteType() { + return ExecuteTypeEnum.CHAIN; + } + + @Override + public String getExecuteName() { + return chainName; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java new file mode 100644 index 000000000..afae9dbba --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Condition.java @@ -0,0 +1,27 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.entity.flow; + +import java.util.List; + +public class Condition { + + private List nodeList; + + public Condition(List nodeList) { + this.nodeList = nodeList; + } + + public List getNodeList() { + return nodeList; + } + + public void setNodeList(List nodeList) { + this.nodeList = nodeList; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java new file mode 100644 index 000000000..81271e3bb --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Executable.java @@ -0,0 +1,12 @@ +package com.yomahub.liteflow.entity.flow; + +import com.yomahub.liteflow.enums.ExecuteTypeEnum; + +public interface Executable { + + void execute(Integer slotIndex) throws Exception; + + ExecuteTypeEnum getExecuteType(); + + String getExecuteName(); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java new file mode 100644 index 000000000..d763dc15b --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/Node.java @@ -0,0 +1,121 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.entity.flow; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.entity.data.DataBus; +import com.yomahub.liteflow.entity.data.Slot; +import com.yomahub.liteflow.enums.ExecuteTypeEnum; +import com.yomahub.liteflow.exception.ChainEndException; +import com.yomahub.liteflow.exception.FlowSystemException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class Node implements Executable{ + + private static final Logger LOG = LoggerFactory.getLogger(Node.class); + + private String id; + + private String clazz; + + private NodeComponent instance; + + private Map condNodeMap = new HashMap(); + + public Node(){ + + } + + public Node(String id, String clazz, NodeComponent instance) { + this.id = id; + this.clazz = clazz; + this.instance = instance; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getClazz() { + return clazz; + } + + public void setClazz(String clazz) { + this.clazz = clazz; + } + + public NodeComponent getInstance() { + return instance; + } + + public void setInstance(NodeComponent instance) { + this.instance = instance; + } + + public Executable getCondNode(String nodeId){ + return this.condNodeMap.get(nodeId); + } + + public void setCondNode(String nodeId, Executable condNode){ + this.condNodeMap.put(nodeId, condNode); + } + + @Override + public void execute(Integer slotIndex) throws Exception { + if(instance == null){ + throw new FlowSystemException("there is no instance for node id " + id); + } + instance.setSlotIndex(slotIndex); + Slot slot = DataBus.getSlot(slotIndex); + + try{ + if(instance.isAccess()){ + + instance.execute(); + + if(instance.isEnd()){ + LOG.info("[{}]:component[{}] lead the chain to end",slot.getRequestId(),instance.getClass().getSimpleName()); + throw new ChainEndException("component lead the chain to end"); + } + }else{ + LOG.info("[{}]:[X]skip component[{}] execution",slot.getRequestId(),instance.getClass().getSimpleName()); + } + }catch (Exception e){ + if(instance.isContinueOnError()){ + String errorMsg = MessageFormat.format("[{0}]:component[{1}] cause error,but flow is still go on", slot.getRequestId(),id); + LOG.error(errorMsg,e); + }else{ + String errorMsg = MessageFormat.format("[{0}]:component[{1}] cause error",slot.getRequestId(),id); + LOG.error(errorMsg,e); + throw e; + } + }finally { + instance.removeSlotIndex(); + instance.removeIsEnd(); + } + } + + @Override + public ExecuteTypeEnum getExecuteType() { + return ExecuteTypeEnum.NODE; + } + + @Override + public String getExecuteName() { + return id; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/ThenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java similarity index 52% rename from liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/ThenCondition.java rename to liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java index 9d1614116..fc66cd599 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/ThenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/ThenCondition.java @@ -1,19 +1,17 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ -package com.yomahub.liteflow.entity.config; +package com.yomahub.liteflow.entity.flow; import java.util.List; public class ThenCondition extends Condition { - public ThenCondition(List nodeList) { + public ThenCondition(List nodeList) { super(nodeList); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/WhenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java similarity index 52% rename from liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/WhenCondition.java rename to liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java index 61531fbb8..562de0755 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/config/WhenCondition.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenCondition.java @@ -1,19 +1,17 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ -package com.yomahub.liteflow.entity.config; +package com.yomahub.liteflow.entity.flow; import java.util.List; public class WhenCondition extends Condition{ - public WhenCondition(List nodeList) { + public WhenCondition(List nodeList) { super(nodeList); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java new file mode 100644 index 000000000..4ea810478 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/flow/WhenConditionThread.java @@ -0,0 +1,39 @@ +package com.yomahub.liteflow.entity.flow; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.core.NodeComponent; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.concurrent.CountDownLatch; + +public class WhenConditionThread extends Thread { + + private static final Logger LOG = LoggerFactory.getLogger(WhenConditionThread.class); + + private Executable executableItem; + + private Integer slotIndex; + + private String requestId; + + private CountDownLatch latch; + + public WhenConditionThread(Executable executableItem,Integer slotIndex,String requestId,CountDownLatch latch){ + this.executableItem = executableItem; + this.slotIndex = slotIndex; + this.requestId = requestId; + this.latch = latch; + } + + @Override + public void run() { + try{ + executableItem.execute(slotIndex); + }catch(Exception e){ + LOG.error("item [{}] execute cause error",executableItem.getExecuteName(),e); + }finally{ + latch.countDown(); + } + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java index aa7f96313..3ca00ba69 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/monitor/CompStatistics.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-4 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.entity.monitor; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java new file mode 100644 index 000000000..b61c4d4d6 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/ExecuteTypeEnum.java @@ -0,0 +1,12 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.enums; + +public enum ExecuteTypeEnum { + CHAIN,NODE +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ChainEndException.java b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ChainEndException.java new file mode 100644 index 000000000..cf8eb3704 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ChainEndException.java @@ -0,0 +1,22 @@ + +package com.yomahub.liteflow.exception; + +public class ChainEndException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** 异常信息 */ + private String message; + + public ChainEndException(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ExecutableItemNotFoundException.java b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ExecutableItemNotFoundException.java new file mode 100644 index 000000000..cd2cf8d15 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/exception/ExecutableItemNotFoundException.java @@ -0,0 +1,31 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.exception; + +public class ExecutableItemNotFoundException extends RuntimeException { + + private static final long serialVersionUID = 1L; + + /** 异常信息 */ + private String message; + + public ExecutableItemNotFoundException() { + } + + public ExecutableItemNotFoundException(String message) { + this.message = message; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index 6e2c87713..99883ff9e 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.flow; @@ -14,8 +12,8 @@ import java.util.Map; import org.apache.commons.collections4.MapUtils; -import com.yomahub.liteflow.entity.config.Chain; -import com.yomahub.liteflow.entity.config.Node; +import com.yomahub.liteflow.entity.flow.Chain; +import com.yomahub.liteflow.entity.flow.Node; public class FlowBus { @@ -34,6 +32,10 @@ public class FlowBus { chainMap.put(name, chain); } + public static boolean containChain(String chainId){ + return chainMap.containsKey(chainId); + } + public static boolean needInit() { return MapUtils.isEmpty(chainMap); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java index f1a780c7a..9b3c85326 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/monitor/MonitorBus.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-4 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.monitor; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java index eb1fd6311..9a0f06ef2 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-7-28 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.parser; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java index b812aa8eb..821abd7c1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/RegexEntity.java @@ -1,32 +1,31 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ package com.yomahub.liteflow.parser; -import java.util.Arrays; - public class RegexEntity { - private String condNode; + private String item; - private String[] realNodeArray; + private String[] realItemArray; - public String getCondNode() { - return condNode; + public String getItem() { + return item; } - public void setCondNode(String condNode) { - this.condNode = condNode; + public void setItem(String item) { + this.item = item; } - public String[] getRealNodeArray() { - return realNodeArray; + public String[] getRealItemArray() { + return realItemArray; } - public void setRealNodeArray(String[] realNodeArray) { - this.realNodeArray = realNodeArray; - } - - @Override - public String toString() { - return "RegexEntity [condNode=" + condNode + ", realNodeArray=" - + Arrays.toString(realNodeArray) + "]"; + public void setRealItemArray(String[] realItemArray) { + this.realItemArray = realItemArray; } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java index 474d26be7..138c82c46 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java @@ -7,6 +7,8 @@ import java.util.Map.Entry; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.yomahub.liteflow.entity.flow.*; +import com.yomahub.liteflow.exception.ExecutableItemNotFoundException; import org.apache.commons.lang3.StringUtils; import org.dom4j.Document; import org.dom4j.Element; @@ -14,11 +16,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.yomahub.liteflow.core.NodeComponent; -import com.yomahub.liteflow.entity.config.Chain; -import com.yomahub.liteflow.entity.config.Condition; -import com.yomahub.liteflow.entity.config.Node; -import com.yomahub.liteflow.entity.config.ThenCondition; -import com.yomahub.liteflow.entity.config.WhenCondition; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.spring.ComponentScaner; import com.yomahub.liteflow.util.Dom4JReader; @@ -70,51 +67,82 @@ public abstract class XmlFlowParser { } // 解析chain节点 - String chainName = null; - String condArrayStr = null; - String[] condArray = null; - List chainNodeList = null; - List conditionList = null; - List chainList = rootElement.elements("chain"); for (Element e : chainList) { - chainName = e.attributeValue("name"); - conditionList = new ArrayList<>(); - for (Iterator it = e.elementIterator(); it.hasNext();) { - Element condE = it.next(); - condArrayStr = condE.attributeValue("value"); - if (StringUtils.isBlank(condArrayStr)) { - continue; - } - chainNodeList = new ArrayList<>(); - condArray = condArrayStr.split(","); - RegexEntity regexEntity = null; - Node node = null; - for (int i = 0; i < condArray.length; i++) { - regexEntity = parseNodeStr(condArray[i].trim()); - node = FlowBus.getNode(regexEntity.getCondNode()); - chainNodeList.add(node); - if(regexEntity.getRealNodeArray() != null){ - for(String key : regexEntity.getRealNodeArray()){ - Node condNode = FlowBus.getNode(key); - if(condNode != null){ - node.setCondNode(condNode.getId(), condNode); - } - } - } - } - if (condE.getName().equals("then")) { - conditionList.add(new ThenCondition(chainNodeList)); - } else if (condE.getName().equals("when")) { - conditionList.add(new WhenCondition(chainNodeList)); - } - } - FlowBus.addChain(chainName, new Chain(chainName,conditionList)); + parseOneChain(e); } } catch (Exception e) { LOG.error("FlowParser parser exception: {}", e); + throw e; } + } + private void parseOneChain(Element e) throws Exception{ + String condArrayStr; + String[] condArray; + List chainNodeList; + List conditionList; + + String chainName = e.attributeValue("name"); + conditionList = new ArrayList<>(); + for (Iterator it = e.elementIterator(); it.hasNext();) { + Element condE = it.next(); + condArrayStr = condE.attributeValue("value"); + if (StringUtils.isBlank(condArrayStr)) { + continue; + } + chainNodeList = new ArrayList<>(); + condArray = condArrayStr.split(","); + RegexEntity regexEntity; + String itemExpression; + String item; + for (int i = 0; i < condArray.length; i++) { + itemExpression = condArray[i].trim(); + regexEntity = parseNodeStr(itemExpression); + item = regexEntity.getItem(); + if(FlowBus.containNode(item)){ + Node node = FlowBus.getNode(item); + chainNodeList.add(node); + if(regexEntity.getRealItemArray() != null){ + for(String key : regexEntity.getRealItemArray()){ + if(FlowBus.containNode(key)){ + Node condNode = FlowBus.getNode(key); + node.setCondNode(condNode.getId(), condNode); + }else if(hasChain(e,key)){ + Chain chain = FlowBus.getChain(key); + node.setCondNode(chain.getChainName(), chain); + } + } + } + }else if(hasChain(e,item)){ + Chain chain = FlowBus.getChain(item); + chainNodeList.add(chain); + }else{ + throw new ExecutableItemNotFoundException(); + } + } + if (condE.getName().equals("then")) { + conditionList.add(new ThenCondition(chainNodeList)); + } else if (condE.getName().equals("when")) { + conditionList.add(new WhenCondition(chainNodeList)); + } + } + FlowBus.addChain(chainName, new Chain(chainName,conditionList)); + } + + private boolean hasChain(Element e,String chainName) throws Exception{ + Element rootElement = e.getParent(); + List chainList = rootElement.elements("chain"); + for(Element ce : chainList){ + String ceName = ce.attributeValue("name"); + if(ceName.equals(chainName)){ + if(!FlowBus.containChain(chainName)){ + parseOneChain(ce); + } + return true; + } + } + return false; } public static RegexEntity parseNodeStr(String str) { @@ -125,13 +153,13 @@ public abstract class XmlFlowParser { list.add(m.group()); } RegexEntity regexEntity = new RegexEntity(); - regexEntity.setCondNode(list.get(0).trim()); + regexEntity.setItem(list.get(0).trim()); if(list.size() > 1){ String[] realNodeArray = list.get(1).split("\\|"); for (int i = 0; i < realNodeArray.length; i++) { realNodeArray[i] = realNodeArray[i].trim(); } - regexEntity.setRealNodeArray(realNodeArray); + regexEntity.setRealItemArray(realNodeArray); } return regexEntity; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java index d3b64c65e..3a1ac1be9 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScaner.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-11-23 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.spring; diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java index 04bef255e..8ba4152c3 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LimitQueue.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-4 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.liteflow.util; diff --git a/liteflow-spring-boot-starter/pom.xml b/liteflow-spring-boot-starter/pom.xml index 5d855a45f..76c858cdd 100644 --- a/liteflow-spring-boot-starter/pom.xml +++ b/liteflow-spring-boot-starter/pom.xml @@ -10,7 +10,7 @@ liteflow com.yomahub - 2.2.2 + 2.2.3-SNAPSHOT diff --git a/liteflow-test-spring/pom.xml b/liteflow-test-spring/pom.xml index 33a556fda..358eb0a30 100644 --- a/liteflow-test-spring/pom.xml +++ b/liteflow-test-spring/pom.xml @@ -9,7 +9,7 @@ liteflow com.yomahub - 2.2.2 + 2.2.3-SNAPSHOT diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/Runner.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/Runner.java index f154ad352..4c54057b6 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/Runner.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/Runner.java @@ -18,5 +18,7 @@ public class Runner { FlowExecutor flowExecutor = context.getBean(FlowExecutor.class); Slot slot = flowExecutor.execute("chain3", "it's a request"); System.out.println(slot); + + System.exit(0); } } diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/AComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/AComponent.java index b3da25f97..4a3e94438 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/AComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/AComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/BComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/BComponent.java index eac170a9d..0ab719582 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/BComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/BComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CComponent.java index 1e30eaf88..fbb3ce335 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; @@ -23,6 +21,7 @@ public class CComponent extends NodeComponent { } catch (InterruptedException e) { e.printStackTrace(); } + this.getSlot().setData("m_flag",4); System.out.println("Ccomponent executed!"); } diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CondComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CondComponent.java index 18637c646..708b9b8a3 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CondComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/CondComponent.java @@ -8,7 +8,6 @@ */ package com.yomahub.flowtest.components; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeCondComponent; import org.springframework.stereotype.Component; @@ -16,7 +15,7 @@ import org.springframework.stereotype.Component; public class CondComponent extends NodeCondComponent { @Override - protected Class processCond() throws Exception { - return BComponent.class; + public String processCond() throws Exception { + return "b"; } } diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/DComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/DComponent.java index 6cafdfa04..c0e17e845 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/DComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/DComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/EComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/EComponent.java index 80d51f637..62b9e2af3 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/EComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/EComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/FComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/FComponent.java index 42fdb1c39..d59ba1904 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/FComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/FComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/GComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/GComponent.java index d3970a31b..50392fffa 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/GComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/GComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/HComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/HComponent.java index ec5582482..a357c34bb 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/HComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/HComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M1Component.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M1Component.java index 200881c10..75095103d 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M1Component.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M1Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M2Component.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M2Component.java index 3a46b0228..4c844e0fa 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M2Component.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M2Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M3Component.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M3Component.java index 01fa36ceb..0a15fbbad 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M3Component.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/M3Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/MComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/MComponent.java index 2957177f0..a39b514b1 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/MComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/MComponent.java @@ -1,16 +1,13 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; import com.yomahub.liteflow.core.FlowExecutor; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeCondComponent; import org.springframework.stereotype.Component; @@ -23,15 +20,17 @@ public class MComponent extends NodeCondComponent { private FlowExecutor flowExecutor; @Override - protected Class processCond() throws Exception { + public String processCond() throws Exception { System.out.println("m conponent executed"); - Integer flag = this.getSlot().getChainReqData("strategy1"); + Integer flag = this.getSlot().getData("m_flag"); if(flag == 1) { - return M1Component.class; + return "m1"; }else if(flag == 2){ - return M2Component.class; - }else { - return M3Component.class; + return "m2"; + }else if(flag == 3){ + return "m3"; + }else{ + return "strategy2"; } } diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P1Component.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P1Component.java index 0699bc743..671c272fa 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P1Component.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P1Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P2Component.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P2Component.java index 0c55aa9a3..cae43ac92 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P2Component.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/P2Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/PComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/PComponent.java index ea2201e57..bb8fce13b 100644 --- a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/PComponent.java +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/PComponent.java @@ -1,35 +1,26 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; -import com.yomahub.liteflow.core.FlowExecutor; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeCondComponent; import org.springframework.stereotype.Component; -import javax.annotation.Resource; - @Component("p") public class PComponent extends NodeCondComponent { - @Resource - private FlowExecutor flowExecutor; - @Override - protected Class processCond() throws Exception { + public String processCond() throws Exception { System.out.println("p conponent executed"); - Integer flag = this.getSlot().getChainReqData("strategy2"); + Integer flag = this.getSlot().getData("p_flag"); if(flag == 10) { - return P1Component.class; + return "p1"; }else { - return P2Component.class; + return "p2"; } } diff --git a/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/QComponent.java b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/QComponent.java new file mode 100644 index 000000000..e6b001e0e --- /dev/null +++ b/liteflow-test-spring/src/main/java/com/yomahub/flowtest/components/QComponent.java @@ -0,0 +1,13 @@ +package com.yomahub.flowtest.components; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("q") +public class QComponent extends NodeComponent { + @Override + public void process() throws Exception { + this.getSlot().setData("p_flag",10); + System.out.println("Qcomponent executed!"); + } +} diff --git a/liteflow-test-spring/src/main/resources/config/flow.xml b/liteflow-test-spring/src/main/resources/config/flow.xml index a53247ed5..2e1d85b74 100644 --- a/liteflow-test-spring/src/main/resources/config/flow.xml +++ b/liteflow-test-spring/src/main/resources/config/flow.xml @@ -25,14 +25,14 @@ - + - + - + diff --git a/liteflow-test-springboot/pom.xml b/liteflow-test-springboot/pom.xml index 0e8590192..e1c39eabd 100644 --- a/liteflow-test-springboot/pom.xml +++ b/liteflow-test-springboot/pom.xml @@ -9,7 +9,7 @@ liteflow com.yomahub - 2.2.2 + 2.2.3-SNAPSHOT diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/FlowtestApplication.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/FlowtestApplication.java index fe9062afb..20700672d 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/FlowtestApplication.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/FlowtestApplication.java @@ -9,6 +9,8 @@ public class FlowtestApplication { public static void main(String[] args) { try{ SpringApplication.run(FlowtestApplication.class, args); + + System.exit(0); }catch (Throwable t){ t.printStackTrace(); } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/TestFlow.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/TestFlow.java index 11ead6667..7d634962c 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/TestFlow.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/TestFlow.java @@ -2,6 +2,8 @@ package com.yomahub.flowtest; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.entity.data.Slot; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/AComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/AComponent.java index b3da25f97..4a3e94438 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/AComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/AComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/BComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/BComponent.java index eac170a9d..0ab719582 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/BComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/BComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CComponent.java index 1e30eaf88..6f2a2b822 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; @@ -23,6 +21,7 @@ public class CComponent extends NodeComponent { } catch (InterruptedException e) { e.printStackTrace(); } + this.getSlot().setData("m_flag",3); System.out.println("Ccomponent executed!"); } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CondComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CondComponent.java index 18637c646..ddd6f835d 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CondComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/CondComponent.java @@ -16,7 +16,7 @@ import org.springframework.stereotype.Component; public class CondComponent extends NodeCondComponent { @Override - protected Class processCond() throws Exception { - return BComponent.class; + public String processCond() throws Exception { + return "b"; } } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java index 6cafdfa04..c0e17e845 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/DComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/EComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/EComponent.java index 80d51f637..62b9e2af3 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/EComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/EComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/FComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/FComponent.java index 42fdb1c39..d59ba1904 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/FComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/FComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java index d3970a31b..50392fffa 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/GComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/HComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/HComponent.java index ec5582482..a357c34bb 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/HComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/HComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M1Component.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M1Component.java index 200881c10..75095103d 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M1Component.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M1Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M2Component.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M2Component.java index 3a46b0228..4c844e0fa 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M2Component.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M2Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M3Component.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M3Component.java index 01fa36ceb..0a15fbbad 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M3Component.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/M3Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/MComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/MComponent.java index 2957177f0..294f043c6 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/MComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/MComponent.java @@ -1,17 +1,16 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeCondComponent; +import com.yomahub.liteflow.entity.flow.Executable; import org.springframework.stereotype.Component; import javax.annotation.Resource; @@ -23,15 +22,15 @@ public class MComponent extends NodeCondComponent { private FlowExecutor flowExecutor; @Override - protected Class processCond() throws Exception { + public String processCond() throws Exception { System.out.println("m conponent executed"); - Integer flag = this.getSlot().getChainReqData("strategy1"); + Integer flag = this.getSlot().getData("m_flag"); if(flag == 1) { - return M1Component.class; + return "m1"; }else if(flag == 2){ - return M2Component.class; + return "m2"; }else { - return M3Component.class; + return "strategy2"; } } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P1Component.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P1Component.java index 0699bc743..671c272fa 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P1Component.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P1Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P2Component.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P2Component.java index 0c55aa9a3..cae43ac92 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P2Component.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/P2Component.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/PComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/PComponent.java index ea2201e57..521d85168 100644 --- a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/PComponent.java +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/PComponent.java @@ -1,11 +1,9 @@ /** - *

Title: liteFlow

+ *

Title: liteflow

*

Description: 轻量级的组件式流程框架

- *

Copyright: Copyright (c) 2017

* @author Bryan.Zhang * @email weenyc31@163.com - * @Date 2017-8-1 - * @version 1.0 + * @Date 2020/4/1 */ package com.yomahub.flowtest.components; @@ -19,17 +17,14 @@ import javax.annotation.Resource; @Component("p") public class PComponent extends NodeCondComponent { - @Resource - private FlowExecutor flowExecutor; - @Override - protected Class processCond() throws Exception { + public String processCond() throws Exception { System.out.println("p conponent executed"); - Integer flag = this.getSlot().getChainReqData("strategy2"); + Integer flag = this.getSlot().getData("p_flag"); if(flag == 10) { - return P1Component.class; + return "p1"; }else { - return P2Component.class; + return "p2"; } } diff --git a/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/QComponent.java b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/QComponent.java new file mode 100644 index 000000000..e6b001e0e --- /dev/null +++ b/liteflow-test-springboot/src/main/java/com/yomahub/flowtest/components/QComponent.java @@ -0,0 +1,13 @@ +package com.yomahub.flowtest.components; + +import com.yomahub.liteflow.core.NodeComponent; +import org.springframework.stereotype.Component; + +@Component("q") +public class QComponent extends NodeComponent { + @Override + public void process() throws Exception { + this.getSlot().setData("p_flag",10); + System.out.println("Qcomponent executed!"); + } +} diff --git a/liteflow-test-springboot/src/main/resources/config/flow.xml b/liteflow-test-springboot/src/main/resources/config/flow.xml index a53247ed5..11c258c33 100644 --- a/liteflow-test-springboot/src/main/resources/config/flow.xml +++ b/liteflow-test-springboot/src/main/resources/config/flow.xml @@ -25,14 +25,14 @@ - + - + - + diff --git a/pom.xml b/pom.xml index 98eae7edf..bceb4489e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yomahub liteflow pom - 2.2.2 + 2.2.3-SNAPSHOT liteflow a lightweight and practical micro-process framework https://github.com/bryan31/liteflow