Browse Source

Merge remote-tracking branch 'refs/remotes/upstream/dev' into dev

jay li 6 months ago
parent
commit
e53e16e79e
54 changed files with 358 additions and 72 deletions
  1. 17 0
      liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java
  2. 27 6
      liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java
  3. 19 1
      liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java
  4. 39 15
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/LifeCycleHolder.java
  5. 4 2
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessChainBuildLifeCycle.java
  6. 17 0
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessChainExecuteLifeCycle.java
  7. 17 0
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessFlowExecuteLifeCycle.java
  8. 4 2
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessNodeBuildLifeCycle.java
  9. 2 2
      liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessScriptEngineInitLifeCycle.java
  10. 6 3
      liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java
  11. 0 3
      liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java
  12. 2 1
      liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java
  13. 34 0
      liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/process/holder/SolonNodeIdHolder.java
  14. 31 17
      liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java
  15. 4 1
      liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java
  16. 2 0
      liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  17. 2 0
      liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  18. 2 0
      liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  19. 3 1
      liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELDeclMultiSpringbootTest1.java
  20. 3 1
      liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELDeclMultiSpringbootTest2.java
  21. 2 0
      liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  22. 2 0
      liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  23. 2 0
      liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  24. 2 0
      liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  25. 2 0
      liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  26. 2 0
      liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  27. 2 0
      liteflow-testcase-el/liteflow-testcase-el-routechain/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  28. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  29. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  30. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  31. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  32. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  33. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  34. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-kotlin-springboot/src/test/java/com/yomahub/liteflow/test/script/BaseTest.java
  35. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  36. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  37. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  38. 2 0
      liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  39. 2 0
      liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  40. 0 1
      liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java
  41. 1 1
      liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSolonTest.java
  42. 8 3
      liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainLifeCycle.java
  43. 8 3
      liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestNodeLifeCycle.java
  44. 2 0
      liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  45. 19 0
      liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainExecuteLifeCycle.java
  46. 8 3
      liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainLifeCycle.java
  47. 19 0
      liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestFlowExecuteLifeCycle.java
  48. 8 3
      liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestNodeLifeCycle.java
  49. 2 0
      liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  50. 2 0
      liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  51. 2 0
      liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  52. 2 0
      liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  53. 2 0
      liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java
  54. 2 3
      pom.xml

+ 17 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java

@@ -25,6 +25,8 @@ import com.yomahub.liteflow.flow.element.Node;
 import com.yomahub.liteflow.flow.element.Rollbackable;
 import com.yomahub.liteflow.flow.entity.CmpStep;
 import com.yomahub.liteflow.flow.id.IdGeneratorHolder;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
+import com.yomahub.liteflow.lifecycle.PostProcessFlowExecuteLifeCycle;
 import com.yomahub.liteflow.log.LFLog;
 import com.yomahub.liteflow.log.LFLoggerManager;
 import com.yomahub.liteflow.monitor.MonitorFile;
@@ -43,6 +45,7 @@ import com.yomahub.liteflow.thread.ExecutorHelper;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.function.Supplier;
@@ -407,6 +410,13 @@ public class FlowExecutor {
 			throw new NoAvailableSlotException(StrUtil.format("the slot[{}] is not exist", slotIndex));
 		}
 
+		// 如果有FlowExecute生命周期实现,则执行
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessFlowExecuteLifeCycleList())){
+			LifeCycleHolder.getPostProcessFlowExecuteLifeCycleList().forEach(
+					postProcessFlowExecuteLifeCycle -> postProcessFlowExecuteLifeCycle.postProcessBeforeFlowExecute(chainId, slot)
+			);
+		}
+
 		//如果传入了用户的RequestId,则用这个请求Id,如果没传入,则进行生成
 		if (StrUtil.isNotBlank(requestId)){
 			slot.putRequestId(requestId);
@@ -515,6 +525,13 @@ public class FlowExecutor {
 				DataBus.releaseSlot(slotIndex);
 				LFLoggerManager.removeRequestId();
 			}
+
+			// 如果有FlowExecute生命周期实现,则执行
+			if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessFlowExecuteLifeCycleList())){
+				LifeCycleHolder.getPostProcessFlowExecuteLifeCycleList().forEach(
+						postProcessFlowExecuteLifeCycle -> postProcessFlowExecuteLifeCycle.postProcessAfterFlowExecute(chainId, slot)
+				);
+			}
 		}
 		return slot;
 	}

+ 27 - 6
liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java

@@ -8,6 +8,7 @@
  */
 package com.yomahub.liteflow.flow;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.annotation.FallbackCmp;
@@ -91,11 +92,21 @@ public class FlowBus {
 
 	// 这个方法主要用于第二阶段的替换chain
 	public static void addChain(Chain chain) {
+		//如果有生命周期则执行相应生命周期实现
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessChainBuildLifeCycleList())){
+			LifeCycleHolder.getPostProcessChainBuildLifeCycleList().forEach(
+					postProcessAfterChainBuildLifeCycle -> postProcessAfterChainBuildLifeCycle.postProcessBeforeChainBuild(chain)
+			);
+		}
+
 		chainMap.put(chain.getChainId(), chain);
+
 		//如果有生命周期则执行相应生命周期实现
-		LifeCycleHolder.getPostProcessAfterChainBuildLifeCycleList().forEach(
-				postProcessAfterChainBuildLifeCycle -> postProcessAfterChainBuildLifeCycle.postProcessAfterChainBuild(chain)
-		);
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessChainBuildLifeCycleList())){
+			LifeCycleHolder.getPostProcessChainBuildLifeCycleList().forEach(
+					postProcessAfterChainBuildLifeCycle -> postProcessAfterChainBuildLifeCycle.postProcessAfterChainBuild(chain)
+			);
+		}
 	}
 
 	public static boolean containChain(String chainId) {
@@ -374,11 +385,21 @@ public class FlowBus {
 	}
 
 	private static void put2NodeMap(String nodeId, Node node){
+		// 如果有生命周期则执行相应生命周期实现
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessNodeBuildLifeCycleList())){
+			LifeCycleHolder.getPostProcessNodeBuildLifeCycleList().forEach(
+					postProcessAfterNodeBuildLifeCycle -> postProcessAfterNodeBuildLifeCycle.postProcessBeforeNodeBuild(node)
+			);
+		}
+
 		nodeMap.put(nodeId, node);
+
 		// 如果有生命周期则执行相应生命周期实现
-		LifeCycleHolder.getPostProcessAfterNodeBuildLifeCycleList().forEach(
-				postProcessAfterNodeBuildLifeCycle -> postProcessAfterNodeBuildLifeCycle.postProcessAfterNodeBuild(node)
-		);
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessNodeBuildLifeCycleList())){
+			LifeCycleHolder.getPostProcessNodeBuildLifeCycleList().forEach(
+					postProcessAfterNodeBuildLifeCycle -> postProcessAfterNodeBuildLifeCycle.postProcessAfterNodeBuild(node)
+			);
+		}
 	}
 
 }

+ 19 - 1
liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/Chain.java

@@ -11,7 +11,10 @@ package com.yomahub.liteflow.flow.element;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.BooleanUtil;
 import com.yomahub.liteflow.builder.el.LiteFlowChainELBuilder;
+import com.yomahub.liteflow.common.ChainConstant;
 import com.yomahub.liteflow.exception.ChainEndException;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
+import com.yomahub.liteflow.lifecycle.PostProcessChainExecuteLifeCycle;
 import com.yomahub.liteflow.log.LFLog;
 import com.yomahub.liteflow.log.LFLoggerManager;
 import com.yomahub.liteflow.slot.DataBus;
@@ -20,6 +23,7 @@ import com.yomahub.liteflow.enums.ExecuteableTypeEnum;
 import com.yomahub.liteflow.exception.FlowSystemException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.function.Consumer;
 
 /**
  * chain对象,实现可执行器
@@ -40,7 +44,7 @@ public class Chain implements Executable{
 
 	private boolean isCompiled = true;
 
-	private String namespace;
+	private String namespace = ChainConstant.DEFAULT_NAMESPACE;
 
 	public Chain(String chainName) {
 		this.chainId = chainName;
@@ -98,6 +102,13 @@ public class Chain implements Executable{
 		}
 		Slot slot = DataBus.getSlot(slotIndex);
 		try {
+			//如果有生命周期则执行相应生命周期实现
+			if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessChainExecuteLifeCycleList())){
+				LifeCycleHolder.getPostProcessChainExecuteLifeCycleList().forEach(
+						postProcessChainExecuteLifeCycle -> postProcessChainExecuteLifeCycle.postProcessBeforeChainExecute(chainId, slot)
+				);
+			}
+
 			// 设置主ChainName
 			slot.setChainId(chainId);
 			// 执行主体Condition
@@ -105,6 +116,13 @@ public class Chain implements Executable{
 				condition.setCurrChainId(chainId);
 				condition.execute(slotIndex);
 			}
+
+			//如果有生命周期则执行相应生命周期实现
+			if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessChainExecuteLifeCycleList())){
+				LifeCycleHolder.getPostProcessChainExecuteLifeCycleList().forEach(
+						postProcessChainExecuteLifeCycle -> postProcessChainExecuteLifeCycle.postProcessAfterChainExecute(chainId, slot)
+				);
+			}
 		}
 		catch (ChainEndException e) {
 			// 这里单独catch ChainEndException是因为ChainEndException是用户自己setIsEnd抛出的异常

+ 39 - 15
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/LifeCycleHolder.java

@@ -12,32 +12,56 @@ import java.util.List;
  */
 public class LifeCycleHolder {
 
-    private static final List<PostProcessAfterScriptEngineInitLifeCycle> postProcessAfterScriptEngineInitLifeCycleList = new ArrayList<>();
+    private static final List<PostProcessScriptEngineInitLifeCycle> POST_PROCESS_SCRIPT_ENGINE_INIT_LIFE_CYCLE_LIST = new ArrayList<>();
 
-    private static final List<PostProcessAfterChainBuildLifeCycle> postProcessAfterChainBuildLifeCycleList = new ArrayList<>();
+    private static final List<PostProcessChainBuildLifeCycle> POST_PROCESS_CHAIN_BUILD_LIFE_CYCLE_LIST = new ArrayList<>();
 
-    private static final List<PostProcessAfterNodeBuildLifeCycle> postProcessAfterNodeBuildLifeCycleList = new ArrayList<>();
+    private static final List<PostProcessNodeBuildLifeCycle> POST_PROCESS_NODE_BUILD_LIFE_CYCLE_LIST = new ArrayList<>();
+
+    private static final List<PostProcessFlowExecuteLifeCycle> POST_PROCESS_FLOW_EXECUTE_LIFE_CYCLE_LIST = new ArrayList<>();
+
+    private static final List<PostProcessChainExecuteLifeCycle> POST_PROCESS_CHAIN_EXECUTE_LIFE_CYCLE_LIST = new ArrayList<>();
 
 
     public static void addLifeCycle(LifeCycle lifeCycle){
-        if (PostProcessAfterScriptEngineInitLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
-            postProcessAfterScriptEngineInitLifeCycleList.add((PostProcessAfterScriptEngineInitLifeCycle)lifeCycle);
-        }else if(PostProcessAfterChainBuildLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
-            postProcessAfterChainBuildLifeCycleList.add((PostProcessAfterChainBuildLifeCycle)lifeCycle);
-        }else if(PostProcessAfterNodeBuildLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
-            postProcessAfterNodeBuildLifeCycleList.add((PostProcessAfterNodeBuildLifeCycle)lifeCycle);
+        if (PostProcessScriptEngineInitLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
+            POST_PROCESS_SCRIPT_ENGINE_INIT_LIFE_CYCLE_LIST.add((PostProcessScriptEngineInitLifeCycle)lifeCycle);
+        }else if(PostProcessChainBuildLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
+            POST_PROCESS_CHAIN_BUILD_LIFE_CYCLE_LIST.add((PostProcessChainBuildLifeCycle)lifeCycle);
+        }else if(PostProcessNodeBuildLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
+            POST_PROCESS_NODE_BUILD_LIFE_CYCLE_LIST.add((PostProcessNodeBuildLifeCycle)lifeCycle);
+        }else if(PostProcessFlowExecuteLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
+            POST_PROCESS_FLOW_EXECUTE_LIFE_CYCLE_LIST.add((PostProcessFlowExecuteLifeCycle)lifeCycle);
+        }else if(PostProcessChainExecuteLifeCycle.class.isAssignableFrom(lifeCycle.getClass())){
+            POST_PROCESS_CHAIN_EXECUTE_LIFE_CYCLE_LIST.add((PostProcessChainExecuteLifeCycle)lifeCycle);
         }
     }
 
-    public static List<PostProcessAfterScriptEngineInitLifeCycle> getPostProcessAfterScriptEngineInitLifeCycleList() {
-        return postProcessAfterScriptEngineInitLifeCycleList;
+    public static List<PostProcessScriptEngineInitLifeCycle> getPostProcessScriptEngineInitLifeCycleList() {
+        return POST_PROCESS_SCRIPT_ENGINE_INIT_LIFE_CYCLE_LIST;
+    }
+
+    public static List<PostProcessChainBuildLifeCycle> getPostProcessChainBuildLifeCycleList() {
+        return POST_PROCESS_CHAIN_BUILD_LIFE_CYCLE_LIST;
+    }
+
+    public static List<PostProcessNodeBuildLifeCycle> getPostProcessNodeBuildLifeCycleList() {
+        return POST_PROCESS_NODE_BUILD_LIFE_CYCLE_LIST;
+    }
+
+    public static List<PostProcessFlowExecuteLifeCycle> getPostProcessFlowExecuteLifeCycleList() {
+        return POST_PROCESS_FLOW_EXECUTE_LIFE_CYCLE_LIST;
     }
 
-    public static List<PostProcessAfterChainBuildLifeCycle> getPostProcessAfterChainBuildLifeCycleList() {
-        return postProcessAfterChainBuildLifeCycleList;
+    public static List<PostProcessChainExecuteLifeCycle> getPostProcessChainExecuteLifeCycleList() {
+        return POST_PROCESS_CHAIN_EXECUTE_LIFE_CYCLE_LIST;
     }
 
-    public static List<PostProcessAfterNodeBuildLifeCycle> getPostProcessAfterNodeBuildLifeCycleList() {
-        return postProcessAfterNodeBuildLifeCycleList;
+    public static void clean(){
+        POST_PROCESS_SCRIPT_ENGINE_INIT_LIFE_CYCLE_LIST.clear();
+        POST_PROCESS_CHAIN_BUILD_LIFE_CYCLE_LIST.clear();
+        POST_PROCESS_NODE_BUILD_LIFE_CYCLE_LIST.clear();
+        POST_PROCESS_FLOW_EXECUTE_LIFE_CYCLE_LIST.clear();
+        POST_PROCESS_CHAIN_EXECUTE_LIFE_CYCLE_LIST.clear();
     }
 }

+ 4 - 2
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessAfterChainBuildLifeCycle.java → liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessChainBuildLifeCycle.java

@@ -4,12 +4,14 @@ import com.yomahub.liteflow.flow.element.Chain;
 
 /**
  * 生命周期接口
- * 在Chain构造后执行,如果有实现的话
+ * 在Chain构造时期,如果有实现的话
  *
  * @author Bryan.Zhang
  * @since 2.12.4
  */
-public interface PostProcessAfterChainBuildLifeCycle extends LifeCycle {
+public interface PostProcessChainBuildLifeCycle extends LifeCycle {
+
+    void postProcessBeforeChainBuild(Chain chain);
 
     void postProcessAfterChainBuild(Chain chain);
 }

+ 17 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessChainExecuteLifeCycle.java

@@ -0,0 +1,17 @@
+package com.yomahub.liteflow.lifecycle;
+
+import com.yomahub.liteflow.slot.Slot;
+
+/**
+ * 生命周期接口
+ * 执行Chain的时候
+ *
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
+public interface PostProcessChainExecuteLifeCycle extends LifeCycle{
+
+    void postProcessBeforeChainExecute(String chainId, Slot slot);
+
+    void postProcessAfterChainExecute(String chainId, Slot slot);
+}

+ 17 - 0
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessFlowExecuteLifeCycle.java

@@ -0,0 +1,17 @@
+package com.yomahub.liteflow.lifecycle;
+
+import com.yomahub.liteflow.slot.Slot;
+
+/**
+ * 生命周期接口
+ * 执行FLowExecutor的时候
+ *
+ * @author Bryan.Zhang
+ * @since 2.12.4
+ */
+public interface PostProcessFlowExecuteLifeCycle extends LifeCycle{
+
+    void postProcessBeforeFlowExecute(String chainId, Slot slot);
+
+    void postProcessAfterFlowExecute(String chainId, Slot slot);
+}

+ 4 - 2
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessAfterNodeBuildLifeCycle.java → liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessNodeBuildLifeCycle.java

@@ -4,12 +4,14 @@ import com.yomahub.liteflow.flow.element.Node;
 
 /**
  * 生命周期接口
- * 在Node构造后执行,如果有实现的话
+ * 在Node构造时期,如果有实现的话
  *
  * @author Bryan.Zhang
  * @since 2.12.4
  */
-public interface PostProcessAfterNodeBuildLifeCycle extends LifeCycle {
+public interface PostProcessNodeBuildLifeCycle extends LifeCycle {
+
+    void postProcessBeforeNodeBuild(Node node);
 
     void postProcessAfterNodeBuild(Node node);
 }

+ 2 - 2
liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessAfterScriptEngineInitLifeCycle.java → liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/PostProcessScriptEngineInitLifeCycle.java

@@ -2,12 +2,12 @@ package com.yomahub.liteflow.lifecycle;
 
 /**
  * 生命周期接口
- * 在初始化Script执行器后执行,如果有实现的话
+ * 在初始化Script执行器时期,如果有实现的话
  *
  * @author Bryan.Zhang
  * @since 2.12.4
  */
-public interface PostProcessAfterScriptEngineInitLifeCycle extends LifeCycle{
+public interface PostProcessScriptEngineInitLifeCycle extends LifeCycle{
 
     void postProcessAfterScriptEngineInit(Object engine);
 }

+ 6 - 3
liteflow-core/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java

@@ -1,6 +1,7 @@
 package com.yomahub.liteflow.script;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.yomahub.liteflow.enums.ScriptTypeEnum;
 import com.yomahub.liteflow.exception.LiteFlowException;
@@ -26,9 +27,11 @@ public abstract class ScriptExecutor {
 	}
 
 	public void lifeCycle(Object engine){
-		LifeCycleHolder.getPostProcessAfterScriptEngineInitLifeCycleList().forEach(
-				postProcessAfterScriptEngineInitLifeCycle -> postProcessAfterScriptEngineInitLifeCycle.postProcessAfterScriptEngineInit(engine)
-		);
+		if (CollUtil.isNotEmpty(LifeCycleHolder.getPostProcessScriptEngineInitLifeCycleList())){
+			LifeCycleHolder.getPostProcessScriptEngineInitLifeCycleList().forEach(
+					postProcessAfterScriptEngineInitLifeCycle -> postProcessAfterScriptEngineInitLifeCycle.postProcessAfterScriptEngineInit(engine)
+			);
+		}
 	}
 
 	public abstract void load(String nodeId, String script);

+ 0 - 3
liteflow-core/src/main/java/com/yomahub/liteflow/script/jsr223/JSR223ScriptExecutor.java

@@ -1,8 +1,6 @@
 package com.yomahub.liteflow.script.jsr223;
 
 import cn.hutool.core.util.StrUtil;
-import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
-import com.yomahub.liteflow.lifecycle.PostProcessAfterScriptEngineInitLifeCycle;
 import com.yomahub.liteflow.log.LFLog;
 import com.yomahub.liteflow.log.LFLoggerManager;
 import com.yomahub.liteflow.script.ScriptExecuteWrap;
@@ -20,7 +18,6 @@ import javax.script.ScriptException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
-import java.util.function.Consumer;
 
 /**
  * JSR223 script engine的统一实现抽象类

+ 2 - 1
liteflow-core/src/main/java/com/yomahub/liteflow/slot/DataBus.java

@@ -21,6 +21,7 @@ import com.yomahub.liteflow.property.LiteflowConfig;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentLinkedQueue;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -82,7 +83,7 @@ public class DataBus {
 	}
 
 	public static int offerSlotByBean(List<Object> contextList) {
-		List<Tuple> contextBeanList = contextList.stream().map(object -> {
+		List<Tuple> contextBeanList = contextList.stream().filter(Objects::nonNull).map(object -> {
             ContextBean contextBean = AnnoUtil.getAnnotation(object.getClass(), ContextBean.class);
             String contextKey;
             if (contextBean != null && StrUtil.isNotBlank(contextBean.value())){

+ 34 - 0
liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/process/holder/SolonNodeIdHolder.java

@@ -0,0 +1,34 @@
+package com.yomahub.liteflow.process.holder;
+
+import org.noear.solon.core.AppContext;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 节点持有人(用于收集 Node 后统一注册)
+ *
+ * @author noear 2024/10/12 created
+ */
+public class SolonNodeIdHolder {
+    /**
+     * 作为 AppContext 附件(避免静态化)
+     * */
+    public static SolonNodeIdHolder of(AppContext context) {
+        return context.attachOf(SolonNodeIdHolder.class, SolonNodeIdHolder::new);
+    }
+
+    private SolonNodeIdHolder() {
+
+    }
+
+    private Set<String> nodeIdSet = new HashSet<>();
+
+    public void add(String nodeId) {
+        this.nodeIdSet.add(nodeId);
+    }
+
+    public Set<String> getNodeIdSet() {
+        return nodeIdSet;
+    }
+}

+ 31 - 17
liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/solon/integration/XPluginImpl.java

@@ -5,9 +5,9 @@ import com.yomahub.liteflow.annotation.LiteflowMethod;
 import com.yomahub.liteflow.core.NodeComponent;
 import com.yomahub.liteflow.core.proxy.DeclWarpBean;
 import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil;
-import com.yomahub.liteflow.flow.FlowBus;
 import com.yomahub.liteflow.lifecycle.LifeCycle;
 import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
+import com.yomahub.liteflow.process.holder.SolonNodeIdHolder;
 import com.yomahub.liteflow.solon.config.LiteflowAutoConfiguration;
 import com.yomahub.liteflow.solon.config.LiteflowMainAutoConfiguration;
 import com.yomahub.liteflow.solon.config.LiteflowMonitorProperty;
@@ -15,6 +15,7 @@ import com.yomahub.liteflow.solon.config.LiteflowProperty;
 import com.yomahub.liteflow.spi.holder.DeclComponentParserHolder;
 import org.noear.solon.Utils;
 import org.noear.solon.core.AppContext;
+import org.noear.solon.core.BeanWrap;
 import org.noear.solon.core.Plugin;
 
 import java.util.*;
@@ -42,6 +43,8 @@ public class XPluginImpl implements Plugin {
 			return;
 		}
 
+		SolonNodeIdHolder nodeIdHolder = SolonNodeIdHolder.of(context);
+
 		// 放到前面
 		context.beanMake(LiteflowProperty.class);
 		context.beanMake(LiteflowMonitorProperty.class);
@@ -51,20 +54,22 @@ public class XPluginImpl implements Plugin {
 		// 订阅生命周期实现类
 		context.subBeansOfType(LifeCycle.class, LifeCycleHolder::addLifeCycle);
 
-		// 订阅 NodeComponent 组件
-		context.lifecycle(()-> {
-			//扫描完成后,收集组件
-			context.beanForeach(bw -> {
-				if (bw.raw() instanceof NodeComponent) {
-					FlowBus.addManagedNode(bw.name(), bw.raw());
-				}
-			});
+		// 订阅 @Component 或别的方式产生的 NodeComponent
+		context.subWrapsOfType(NodeComponent.class, bw->{
+			if (Utils.isNotEmpty(bw.name())) {
+				NodeComponent node1 = bw.raw();
+				node1.setNodeId(bw.name());
+
+				nodeIdHolder.add(node1.getNodeId());
+			}
 		});
 
 		Set<Class<?>> liteflowMethodClassSet = new HashSet<>();
 
+		//添加 @LiteflowMethod 注解处理
 		context.beanExtractorAdd(LiteflowMethod.class, (bw, method, anno) -> {
 			if (liteflowMethodClassSet.contains(bw.clz())) {
+				//避免重复处理类
 				return;
 			} else {
 				liteflowMethodClassSet.add(bw.clz());
@@ -76,22 +81,31 @@ public class XPluginImpl implements Plugin {
 
 			for (DeclWarpBean declWarpBean : declWarpBeanList) {
 				NodeComponent node1 = LiteFlowProxyUtil.proxy2NodeComponent(declWarpBean);
-				FlowBus.addManagedNode(node1.getNodeId(), node1);
+
+				BeanWrap node1Bw = context.wrap(node1.getNodeId(), node1);
+				context.putWrap(node1.getNodeId(), node1Bw);
+
+				nodeIdHolder.add(node1.getNodeId());
 			}
 		});
 
+		//添加 @LiteflowComponent 注解处理
 		context.beanBuilderAdd(LiteflowComponent.class, (clz, bw, anno) -> {
-			if (NodeComponent.class.isAssignableFrom(clz)) {
-				NodeComponent node1 = bw.raw();
+			if(NodeComponent.class.isAssignableFrom(clz)) {
 				String nodeId = Utils.annoAlias(anno.id(), anno.value());
+				if (Utils.isNotEmpty(nodeId)) {
+					NodeComponent node1 = bw.raw();
+					node1.setNodeId(nodeId);
+					node1.setName(anno.name());
 
-				node1.setNodeId(nodeId);
-				node1.setName(anno.name());
+					context.putWrap(node1.getNodeId(), bw);
 
-				FlowBus.addManagedNode(nodeId, node1);
-			} else {
-				context.beanExtractOrProxy(bw); // 尝试提取 LiteflowMethod 函数,并支持自动代理
+					nodeIdHolder.add(node1.getNodeId());
+				}
 			}
+
+			// 支持动态代理与函数提取
+			context.beanExtractOrProxy(bw);
 		});
 	}
 }

+ 4 - 1
liteflow-solon-plugin/src/main/java/com/yomahub/liteflow/spi/solon/SolonContextCmpInit.java

@@ -1,6 +1,9 @@
 package com.yomahub.liteflow.spi.solon;
 
+import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.process.holder.SolonNodeIdHolder;
 import com.yomahub.liteflow.spi.ContextCmpInit;
+import org.noear.solon.Solon;
 
 /**
  * Solon 环境容器上下文组件初始化实现(在 solon 里没有用上;机制不同)
@@ -12,7 +15,7 @@ public class SolonContextCmpInit implements ContextCmpInit {
 
 	@Override
 	public void initCmp() {
-		// 已在 XPluginImpl 添加组件
+		SolonNodeIdHolder.of(Solon.context()).getNodeIdSet().forEach(FlowBus::addManagedNode);
 	}
 
 	@Override

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-apollo-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -24,6 +25,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-builder/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.thread.ExecutorHelper;
@@ -17,6 +18,7 @@ public class BaseTest {
 		SpiFactoryInitializing.clean();
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 3 - 1
liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELDeclMultiSpringbootTest1.java

@@ -9,13 +9,15 @@ import com.yomahub.liteflow.test.BaseTest;
 import com.yomahub.liteflow.test.builder.cmp1.*;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.noear.solon.annotation.Import;
 import org.noear.solon.annotation.Inject;
 import org.noear.solon.test.SolonTest;
 
 //基于builder模式的单元测试
 //这里只是最基本的builder模式的测试,只是为了验证在springboot模式下的正常性
 //更详细的builder模式测试用例会单独拉testcase去做
-@SolonTest
+@SolonTest(scanning = false)
+@Import(scanPackages={ "com.yomahub.liteflow.test.builder.domain" })
 public class BuilderELDeclMultiSpringbootTest1 extends BaseTest {
 
 	@Inject

+ 3 - 1
liteflow-testcase-el/liteflow-testcase-el-declare-multi-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELDeclMultiSpringbootTest2.java

@@ -6,12 +6,14 @@ import com.yomahub.liteflow.flow.LiteflowResponse;
 import com.yomahub.liteflow.test.BaseTest;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
+import org.noear.solon.annotation.Import;
 import org.noear.solon.annotation.Inject;
 import org.noear.solon.test.SolonTest;
 
 //基于builder模式的单元测试
 //这里测试的是通过spring去扫描,但是通过代码去构建chain的用例
-@SolonTest
+@SolonTest(scanning = false)
+@Import(scanPackages = { "com.yomahub.liteflow.test.builder.cmp2" })
 public class BuilderELDeclMultiSpringbootTest2 extends BaseTest {
 
 	@Inject

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-declare-multi-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.process.holder.SpringCmpAroundAspectHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
@@ -20,6 +21,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		SpringCmpAroundAspectHolder.clean();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-declare-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.process.holder.SpringCmpAroundAspectHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
@@ -21,6 +22,7 @@ public class BaseTest {
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
 		SpringCmpAroundAspectHolder.clean();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-etcd-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-nacos-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,5 +20,6 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -3,6 +3,7 @@ package com.yomahub.liteflow.test;
 import com.yomahub.liteflow.core.FlowExecutorHolder;
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.thread.ExecutorHelper;
@@ -19,6 +20,7 @@ public class BaseTest {
 		FlowExecutorHolder.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-redis-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,5 +20,6 @@ public class BaseTest {
         LiteflowConfigGetter.clean();
         FlowInitHook.cleanHook();
         FlowBus.clearStat();
+        LifeCycleHolder.clean();
     }
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-routechain/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-aviator-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-graaljs-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-groovy-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-java-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-javascript-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-javax-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-kotlin-springboot/src/test/java/com/yomahub/liteflow/test/script/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test.script;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-lua-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-multi-language-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-python-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-script-qlexpress-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.thread.ExecutorHelper;
@@ -17,6 +18,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 0 - 1
liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/builder/BuilderELSpringbootTest2.java

@@ -6,7 +6,6 @@ import com.yomahub.liteflow.flow.LiteflowResponse;
 import com.yomahub.liteflow.test.BaseTest;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
 import org.noear.solon.annotation.Inject;
 import org.noear.solon.test.SolonTest;
 

+ 1 - 1
liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/fallback/FallbackELSolonTest.java

@@ -169,7 +169,7 @@ public class FallbackELSolonTest extends BaseTest {
         LiteflowResponse response = flowExecutor.execute2Resp("concurrent2", "arg");
         Assertions.assertTrue(response.isSuccess());
         String stepStr = response.getExecuteStepStrWithoutTime();
-        Assertions.assertTrue("fb_comm_cmp==>fb_bool_cmp".equals(stepStr) || "ifn2==>c".equals(stepStr));
+        Assertions.assertTrue("fb_comm_cmp==>fb_bool_cmp".equals(stepStr) || "fb_bool_cmp==>fb_comm_cmp".equals(stepStr) || "ifn2==>c".equals(stepStr));
     }
 
     @Test

+ 8 - 3
liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainLifeCycle.java

@@ -2,13 +2,18 @@ package com.yomahub.liteflow.test.lifecycle.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.flow.element.Chain;
-import com.yomahub.liteflow.lifecycle.PostProcessAfterChainBuildLifeCycle;
+import com.yomahub.liteflow.lifecycle.PostProcessChainBuildLifeCycle;
 import org.noear.solon.annotation.Component;
 
 @Component
-public class TestChainLifeCycle implements PostProcessAfterChainBuildLifeCycle {
+public class TestChainLifeCycle implements PostProcessChainBuildLifeCycle {
+    @Override
+    public void postProcessBeforeChainBuild(Chain chain) {
+        System.out.println(StrUtil.format("Chain Build(前)生命周期——[{}]已被加载",chain.getChainId()));
+    }
+
     @Override
     public void postProcessAfterChainBuild(Chain chain) {
-        System.out.println(StrUtil.format("Chain生命周期——[{}]已被加载",chain.getChainId()));
+        System.out.println(StrUtil.format("Chain Build(后)生命周期——[{}]已被加载",chain.getChainId()));
     }
 }

+ 8 - 3
liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestNodeLifeCycle.java

@@ -2,13 +2,18 @@ package com.yomahub.liteflow.test.lifecycle.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.flow.element.Node;
-import com.yomahub.liteflow.lifecycle.PostProcessAfterNodeBuildLifeCycle;
+import com.yomahub.liteflow.lifecycle.PostProcessNodeBuildLifeCycle;
 import org.noear.solon.annotation.Component;
 
 @Component
-public class TestNodeLifeCycle implements PostProcessAfterNodeBuildLifeCycle {
+public class TestNodeLifeCycle implements PostProcessNodeBuildLifeCycle {
+    @Override
+    public void postProcessBeforeNodeBuild(Node node) {
+        System.out.println(StrUtil.format("Node生命周期(前)——[{}]已被加载",node.getId()));
+    }
+
     @Override
     public void postProcessAfterNodeBuild(Node node) {
-        System.out.println(StrUtil.format("Node生命周期——[{}]已被加载",node.getId()));
+        System.out.println(StrUtil.format("Node生命周期(后)——[{}]已被加载",node.getId()));
     }
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.process.holder.SpringCmpAroundAspectHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
@@ -21,6 +22,7 @@ public class BaseTest {
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
 		SpringCmpAroundAspectHolder.clean();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 19 - 0
liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainExecuteLifeCycle.java

@@ -0,0 +1,19 @@
+package com.yomahub.liteflow.test.lifecycle.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.lifecycle.PostProcessChainExecuteLifeCycle;
+import com.yomahub.liteflow.slot.Slot;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestChainExecuteLifeCycle implements PostProcessChainExecuteLifeCycle {
+    @Override
+    public void postProcessBeforeChainExecute(String chainId, Slot slot) {
+        System.out.println(StrUtil.format("Chain Execute 生命周期(前)——[{}]已被加载",chainId));
+    }
+
+    @Override
+    public void postProcessAfterChainExecute(String chainId, Slot slot) {
+        System.out.println(StrUtil.format("Chain Execute 生命周期(后)——[{}]已被加载",chainId));
+    }
+}

+ 8 - 3
liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestChainLifeCycle.java

@@ -2,13 +2,18 @@ package com.yomahub.liteflow.test.lifecycle.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.flow.element.Chain;
-import com.yomahub.liteflow.lifecycle.PostProcessAfterChainBuildLifeCycle;
+import com.yomahub.liteflow.lifecycle.PostProcessChainBuildLifeCycle;
 import org.springframework.stereotype.Component;
 
 @Component
-public class TestChainLifeCycle implements PostProcessAfterChainBuildLifeCycle {
+public class TestChainLifeCycle implements PostProcessChainBuildLifeCycle {
+    @Override
+    public void postProcessBeforeChainBuild(Chain chain) {
+        System.out.println(StrUtil.format("Chain Build生命周期(前)——[{}]已被加载",chain.getChainId()));
+    }
+
     @Override
     public void postProcessAfterChainBuild(Chain chain) {
-        System.out.println(StrUtil.format("Chain生命周期——[{}]已被加载",chain.getChainId()));
+        System.out.println(StrUtil.format("Chain Build生命周期(后)——[{}]已被加载",chain.getChainId()));
     }
 }

+ 19 - 0
liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestFlowExecuteLifeCycle.java

@@ -0,0 +1,19 @@
+package com.yomahub.liteflow.test.lifecycle.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.lifecycle.PostProcessFlowExecuteLifeCycle;
+import com.yomahub.liteflow.slot.Slot;
+import org.springframework.stereotype.Component;
+
+@Component
+public class TestFlowExecuteLifeCycle implements PostProcessFlowExecuteLifeCycle {
+    @Override
+    public void postProcessBeforeFlowExecute(String chainId, Slot slot) {
+        System.out.println(StrUtil.format("FlowExecutor 生命周期(前)——[{}]已被加载",chainId));
+    }
+
+    @Override
+    public void postProcessAfterFlowExecute(String chainId, Slot slot) {
+        System.out.println(StrUtil.format("FlowExecutor 生命周期(后)——[{}]已被加载",chainId));
+    }
+}

+ 8 - 3
liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/lifecycle/impl/TestNodeLifeCycle.java

@@ -2,13 +2,18 @@ package com.yomahub.liteflow.test.lifecycle.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.yomahub.liteflow.flow.element.Node;
-import com.yomahub.liteflow.lifecycle.PostProcessAfterNodeBuildLifeCycle;
+import com.yomahub.liteflow.lifecycle.PostProcessNodeBuildLifeCycle;
 import org.springframework.stereotype.Component;
 
 @Component
-public class TestNodeLifeCycle implements PostProcessAfterNodeBuildLifeCycle {
+public class TestNodeLifeCycle implements PostProcessNodeBuildLifeCycle {
+    @Override
+    public void postProcessBeforeNodeBuild(Node node) {
+        System.out.println(StrUtil.format("Node Build生命周期(前)——[{}]已被加载",node.getId()));
+    }
+
     @Override
     public void postProcessAfterNodeBuild(Node node) {
-        System.out.println(StrUtil.format("Node生命周期——[{}]已被加载",node.getId()));
+        System.out.println(StrUtil.format("Node Build生命周期(后)——[{}]已被加载",node.getId()));
     }
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.process.holder.SpringCmpAroundAspectHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
@@ -21,6 +22,7 @@ public class BaseTest {
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
 		SpringCmpAroundAspectHolder.clean();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-sql-solon/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.thread.ExecutorHelper;
@@ -17,5 +18,6 @@ public class BaseTest {
         LiteflowConfigGetter.clean();
         FlowInitHook.cleanHook();
         FlowBus.clearStat();
+        LifeCycleHolder.clean();
     }
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-sql-springboot-dynamic/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -23,6 +24,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-sql-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -23,6 +24,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 0
liteflow-testcase-el/liteflow-testcase-el-zk-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java

@@ -2,6 +2,7 @@ package com.yomahub.liteflow.test;
 
 import com.yomahub.liteflow.core.FlowInitHook;
 import com.yomahub.liteflow.flow.FlowBus;
+import com.yomahub.liteflow.lifecycle.LifeCycleHolder;
 import com.yomahub.liteflow.property.LiteflowConfigGetter;
 import com.yomahub.liteflow.spi.holder.SpiFactoryInitializing;
 import com.yomahub.liteflow.spring.ComponentScanner;
@@ -19,6 +20,7 @@ public class BaseTest {
 		LiteflowConfigGetter.clean();
 		FlowInitHook.cleanHook();
 		FlowBus.clearStat();
+		LifeCycleHolder.clean();
 	}
 
 }

+ 2 - 3
pom.xml

@@ -64,7 +64,7 @@
 		<bytebuddy.version>1.14.10</bytebuddy.version>
 		<aspectjweaver.version>1.8.13</aspectjweaver.version>
 		<logback-classic.version>1.2.3</logback-classic.version>
-		<solon.version>2.9.2</solon.version>
+		<solon.version>3.0.1</solon.version>
 		<netty.version>4.1.84.Final</netty.version>
 		<httpclient.version>4.5.13</httpclient.version>
 		<commons-beanutils.version>1.9.4</commons-beanutils.version>
@@ -329,8 +329,6 @@
 		</dependencies>
 	</dependencyManagement>
 
-
-
 	<build>
 		<plugins>
 			<plugin>
@@ -403,6 +401,7 @@
 					</execution>
 				</executions>
 			</plugin>
+
 			<!-- version number -->
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>