diff --git a/pom.xml b/pom.xml index a38f32236..821147328 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ liteflow jar 4.0.0 - 1.2.3 + 1.2.4 UTF-8 diff --git a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java index f748eb789..f9ab60a79 100644 --- a/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java +++ b/src/main/java/com/thebeastshop/liteflow/core/FlowExecutor.java @@ -64,8 +64,8 @@ public class FlowExecutor { return execute(chainId, param, slotClazz,null,false); } - public T invoke(String chainId,Class slotClazz,Integer slotIndex){ - return execute(chainId,null, slotClazz,slotIndex,true); + public void invoke(String chainId,Object param,Class slotClazz,Integer slotIndex){ + execute(chainId, param, slotClazz,slotIndex,true); } public T execute(String chainId,Object param,Class slotClazz,Integer slotIndex,boolean isInnerChain){ @@ -95,8 +95,10 @@ public class FlowExecutor { throw new NoAvailableSlotException("the slot is not exist"); } - if(!isInnerChain && param != null) { + if(!isInnerChain) { slot.setRequestData(param); + }else { + slot.setChainReqData(chainId, param); } List conditionList = chain.getConditionList(); diff --git a/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java b/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java index 417d81af5..32a695b88 100644 --- a/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java +++ b/src/main/java/com/thebeastshop/liteflow/entity/data/AbsSlot.java @@ -34,6 +34,8 @@ public abstract class AbsSlot implements Slot{ private final String NODE_OUTPUT_PREFIX = "output_"; + private final String CHAIN_REQ_PREFIX = "chain_req_"; + private Deque executeSteps = new ArrayDeque(); protected ConcurrentHashMap dataMap = new ConcurrentHashMap(); @@ -70,6 +72,14 @@ public abstract class AbsSlot implements Slot{ dataMap.put(RESPONSE, t); } + public T getChainReqData(String chainId) { + return (T)dataMap.get(CHAIN_REQ_PREFIX + chainId); + } + + public void setChainReqData(String chainId, T t) { + dataMap.put(CHAIN_REQ_PREFIX + chainId, t); + } + public T getData(String key){ return (T)dataMap.get(key); } diff --git a/src/main/java/com/thebeastshop/liteflow/entity/data/Slot.java b/src/main/java/com/thebeastshop/liteflow/entity/data/Slot.java index c7556439f..3e0d706f8 100644 --- a/src/main/java/com/thebeastshop/liteflow/entity/data/Slot.java +++ b/src/main/java/com/thebeastshop/liteflow/entity/data/Slot.java @@ -24,6 +24,10 @@ public interface Slot { public T getResponseData(); + public void setChainReqData(String chainId, T t); + + public T getChainReqData(String chainId); + public void setResponseData(T t); public T getData(String key); diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/HComponent.java b/src/test/java/com/thebeastshop/liteflow/test/component/HComponent.java index f1ab7a653..a58eb4448 100644 --- a/src/test/java/com/thebeastshop/liteflow/test/component/HComponent.java +++ b/src/test/java/com/thebeastshop/liteflow/test/component/HComponent.java @@ -26,7 +26,7 @@ public class HComponent extends NodeComponent { @Override public void process() { System.out.println("Hcomponent executed!"); - flowExecutor.invoke("strategy", DefaultSlot.class, this.getSlotIndex()); + flowExecutor.invoke("strategy1",3, DefaultSlot.class, this.getSlotIndex()); } } diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/M3Component.java b/src/test/java/com/thebeastshop/liteflow/test/component/M3Component.java new file mode 100644 index 000000000..13926b7ce --- /dev/null +++ b/src/test/java/com/thebeastshop/liteflow/test/component/M3Component.java @@ -0,0 +1,32 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.liteflow.test.component; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; +import com.thebeastshop.liteflow.entity.data.DefaultSlot; + +@Component("m3") +public class M3Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("m3 component executed!"); + flowExecutor.invoke("strategy2",10, DefaultSlot.class, this.getSlotIndex()); + } + +} diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/MComponent.java b/src/test/java/com/thebeastshop/liteflow/test/component/MComponent.java index d9267b908..8e182c2ff 100644 --- a/src/test/java/com/thebeastshop/liteflow/test/component/MComponent.java +++ b/src/test/java/com/thebeastshop/liteflow/test/component/MComponent.java @@ -26,7 +26,15 @@ public class MComponent extends NodeCondComponent { @Override protected String processCond() throws Exception { System.out.println("m conponent executed"); - return "m1"; + Integer flag = this.getSlot().getChainReqData("strategy1"); + if(flag == 1) { + return "m1"; + }else if(flag == 2){ + return "m2"; + }else { + return "m3"; + } + } } diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/P1Component.java b/src/test/java/com/thebeastshop/liteflow/test/component/P1Component.java new file mode 100644 index 000000000..c0f1a0c00 --- /dev/null +++ b/src/test/java/com/thebeastshop/liteflow/test/component/P1Component.java @@ -0,0 +1,30 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.liteflow.test.component; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; + +@Component("p1") +public class P1Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("p1 component executed!"); + } + +} diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/P2Component.java b/src/test/java/com/thebeastshop/liteflow/test/component/P2Component.java new file mode 100644 index 000000000..d60947c16 --- /dev/null +++ b/src/test/java/com/thebeastshop/liteflow/test/component/P2Component.java @@ -0,0 +1,30 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.liteflow.test.component; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeComponent; + +@Component("p2") +public class P2Component extends NodeComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + public void process() { + System.out.println("p2 component executed!"); + } + +} diff --git a/src/test/java/com/thebeastshop/liteflow/test/component/PComponent.java b/src/test/java/com/thebeastshop/liteflow/test/component/PComponent.java new file mode 100644 index 000000000..f3f843bda --- /dev/null +++ b/src/test/java/com/thebeastshop/liteflow/test/component/PComponent.java @@ -0,0 +1,37 @@ +/** + *

Title: liteFlow

+ *

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

+ *

Copyright: Copyright (c) 2017

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2017-8-1 + * @version 1.0 + */ +package com.thebeastshop.liteflow.test.component; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Component; + +import com.thebeastshop.liteflow.core.FlowExecutor; +import com.thebeastshop.liteflow.core.NodeCondComponent; + +@Component("p") +public class PComponent extends NodeCondComponent { + + @Resource + private FlowExecutor flowExecutor; + + @Override + protected String processCond() throws Exception { + System.out.println("p conponent executed"); + Integer flag = this.getSlot().getChainReqData("strategy2"); + if(flag == 10) { + return "p1"; + }else { + return "p2"; + } + + } + +} diff --git a/src/test/resources/config/flow.xml b/src/test/resources/config/flow.xml index d29fc2d61..25f111ce6 100644 --- a/src/test/resources/config/flow.xml +++ b/src/test/resources/config/flow.xml @@ -27,7 +27,11 @@ - - + + + + + + \ No newline at end of file