flowable 6.4.2 - 脚本引擎

.
org.flowable.common.engine.impl.scripting.ScriptingEngines

public class ScriptingEngines {

    public static final String DEFAULT_SCRIPTING_LANGUAGE = "juel";
    public static final String GROOVY_SCRIPTING_LANGUAGE = "groovy";

    private final ScriptEngineManager scriptEngineManager;
    protected ScriptBindingsFactory scriptBindingsFactory;

    protected boolean cacheScriptingEngines = true;
    protected Map<String, ScriptEngine> cachedEngines;

    public ScriptingEngines(ScriptBindingsFactory scriptBindingsFactory) {
        this(
                /**
                 * <pre>
                 *     @see javax.script.ScriptEngineManager
                 *          @see javax.script.ScriptEngineManager#init(java.lang.ClassLoader)
                 *              @see javax.script.ScriptEngineManager#initEngines(java.lang.ClassLoader)
                 *                  1、加载类路径下实现 javax.script.ScriptEngineFactory 接口的spi类
                 *                      @see org.activiti.engine.impl.scripting.JuelScriptEngineFactory
                 *                      @see org.codehaus.groovy.jsr223.GroovyScriptEngineFactory
                 *                      @see jdk.nashorn.api.scripting.NashornScriptEngineFactory
                 *                      @see org.flowable.engine.impl.scripting.GroovyStaticScriptEngineFactory
                 * </pre>
                 */
                new ScriptEngineManager()
        );
        this.scriptBindingsFactory = scriptBindingsFactory;
    }

    // ...
    
    public Object evaluate(String script, String language, VariableScope variableScope, boolean storeScriptVariables) {
        return evaluate(
                script,
                language,
                /**
                 * 调用 scriptBindingsFactory.createBindings(。。。)
                 */
                createBindings(variableScope, storeScriptVariables)
        ); // !!!
    }

    // ...

    protected Object evaluate(String script, String language, Bindings bindings) {
        /**
         * 根据《语言类型》获取脚本引擎
         */
        ScriptEngine scriptEngine = getEngineByName(language);
        try {
            /**
             * <pre>
             *     当为 {@link org.activiti.engine.impl.scripting.JuelScriptEngineFactory#getScriptEngine}
             *          @see org.activiti.engine.impl.scripting.JuelScriptEngine#eval
             *     当为 {@link org.codehaus.groovy.jsr223.GroovyScriptEngineFactory#getScriptEngine}
             *           @see org.codehaus.groovy.jsr223.GroovyScriptEngineImpl
             *     当为 {@link jdk.nashorn.api.scripting.NashornScriptEngineFactory#getScriptEngine}
             *           @see jdk.nashorn.api.scripting.NashornScriptEngine
             *     当为 {@link org.flowable.engine.impl.scripting.GroovyStaticScriptEngineFactory#getScriptEngine}
             *           @see ...
             * </pre>
             */
            return scriptEngine.eval(script, bindings);
        } catch (ScriptException e) {
            throw new FlowableException("problem evaluating script: " + e.getMessage(), e);
        }
    }

    protected ScriptEngine getEngineByName(String language) {
        ScriptEngine scriptEngine = null;

        if (cacheScriptingEngines) {
            // ...
        } else {
            /**
             * @see javax.script.ScriptEngineManager#getEngineByName(java.lang.String)
             * <pre>
             *     @see org.activiti.engine.impl.scripting.JuelScriptEngineFactory#getScriptEngine
             *     @see org.codehaus.groovy.jsr223.GroovyScriptEngineFactory#getScriptEngine
             *     @see jdk.nashorn.api.scripting.NashornScriptEngineFactory#getScriptEngine
             *     @see org.flowable.engine.impl.scripting.GroovyStaticScriptEngineFactory#getScriptEngine
             * </pre>
             */
            scriptEngine = scriptEngineManager.getEngineByName(language);
        }

        if (scriptEngine == null) {
            throw new FlowableException("Can't find scripting engine for '" + language + "'");
        }
        return scriptEngine;
    }

    // ...
}

使用

// org.flowable.engine.impl.bpmn.behavior.ScriptTaskActivityBehavior#execute
/**
 * 执行脚本
 */
Object result = scriptingEngines.evaluate(script, language, execution, storeScriptVariables);

.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值