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

This commit is contained in:
bryan31
2021-08-09 18:41:07 +08:00
parent 57cb85a955
commit 64f7467503
5 changed files with 32 additions and 11 deletions

View File

@@ -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);
}
}

View File

@@ -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){}
}
//目前这种方式刷新不完全平滑

View File

@@ -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();
}

View File

@@ -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(){

View File

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