Procházet zdrojové kódy

feature #I44FT8 支持脚本语言的组件,并支持动态刷新脚本(版本特性)

bryan31 před 3 roky
rodič
revize
64f7467503

+ 3 - 3
liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptNodeComponent.java

@@ -1,6 +1,6 @@
 package com.yomahub.liteflow.core;
 
-import com.yomahub.liteflow.script.ScriptFactory;
+import com.yomahub.liteflow.script.ScriptExecutorFactory;
 
 /**
  * 脚本组件类
@@ -11,10 +11,10 @@ public class ScriptNodeComponent extends NodeComponent{
 
     @Override
     public void process() throws Exception {
-        ScriptFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex());
+        ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex());
     }
 
     public void loadScript(String script) {
-        ScriptFactory.loadInstance().getScriptExecutor().load(getNodeId(), script);
+        ScriptExecutorFactory.loadInstance().getScriptExecutor().load(getNodeId(), script);
     }
 }

+ 10 - 1
liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java

@@ -20,11 +20,13 @@ import com.yomahub.liteflow.exception.ComponentCannotRegisterException;
 import com.yomahub.liteflow.parser.LocalJsonFlowParser;
 import com.yomahub.liteflow.parser.LocalXmlFlowParser;
 import com.yomahub.liteflow.parser.LocalYmlFlowParser;
+import com.yomahub.liteflow.script.ScriptExecutor;
+import com.yomahub.liteflow.script.ScriptExecutorFactory;
+import com.yomahub.liteflow.script.exception.ScriptSpiException;
 import com.yomahub.liteflow.util.SpringAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.lang.reflect.Proxy;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -119,6 +121,13 @@ public class FlowBus {
     public static void cleanCache() {
         chainMap.clear();
         nodeMap.clear();
+        //如果引入了脚本组件SPI,则还需要清理脚本的缓存
+        try{
+            ScriptExecutor scriptExecutor = ScriptExecutorFactory.loadInstance().getScriptExecutor();
+            if (ObjectUtil.isNotNull(scriptExecutor)){
+                scriptExecutor.cleanCache();
+            }
+        }catch (ScriptSpiException e){}
     }
 
     //目前这种方式刷新不完全平滑

+ 3 - 1
liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java

@@ -1,7 +1,7 @@
 package com.yomahub.liteflow.script;
 
 /**
- * 脚本执行器
+ * 脚本执行器接口
  * @author Bryan.Zhang
  * @since 2.5.11
  */
@@ -12,4 +12,6 @@ public interface ScriptExecutor {
     void load(String nodeId, String script);
 
     void execute(String nodeId, int slotIndex);
+
+    void cleanCache();
 }

+ 11 - 6
liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptFactory.java → liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutorFactory.java

@@ -5,17 +5,22 @@ import com.yomahub.liteflow.script.exception.ScriptSpiException;
 
 import java.util.ServiceLoader;
 
-public class ScriptFactory {
+/**
+ * 脚本执行器工厂类
+ * @author Bryan.Zhang
+ * @since 2.5.11
+ */
+public class ScriptExecutorFactory {
 
-    private static ScriptFactory scriptFactory;
+    private static ScriptExecutorFactory scriptExecutorFactory;
 
     private ScriptExecutor scriptExecutor;
 
-    public static ScriptFactory loadInstance(){
-        if (ObjectUtil.isNull(scriptFactory)){
-            scriptFactory = new ScriptFactory();
+    public static ScriptExecutorFactory loadInstance(){
+        if (ObjectUtil.isNull(scriptExecutorFactory)){
+            scriptExecutorFactory = new ScriptExecutorFactory();
         }
-        return scriptFactory;
+        return scriptExecutorFactory;
     }
 
     public ScriptExecutor getScriptExecutor(){

+ 5 - 0
liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java

@@ -52,4 +52,9 @@ public class QLExpressScriptExecutor implements ScriptExecutor {
             throw new ScriptExecuteException(errorMsg);
         }
     }
+
+    @Override
+    public void cleanCache() {
+        expressRunner.clearExpressCache();
+    }
 }