Actualización de nashorn a graalvm con openjdk 17. Obtener una PolyglotException: java.lang.ExceptionInInitializerError al agregar enlaces al alcance del motor. mi motor de script se inicializa en el método init y luego se usa en una clase diferente. Me pregunto si es un problema de subprocesos múltiples. incapaz de averiguar la causa raíz
El motor de secuencias de comandos se inicializa en el bloque de inicio de clase 1 y 2.
Clase 1
public void init() { createScriptEngine }
Clase 2
public static ScriptEngine createScriptEngine (){ ScriptEngineManager manager = new ScriptEngineManager(); ret = manager.getEngineByName(engineName); if(ret instanceof GraalJSScriptEngine) { Bindings bindings = ret.getBindings(ScriptContext.ENGINE_SCOPE); bindings.put("polyglot.js.nashorn-compat", true); } }
El motor en sí se usa en la clase 3 para evaluar la clase de script 3
private object evaluateScript(ScriptEngine scriptEngine, String script){ Bindings bindings = scriptEngine.getContext().getBindings(ScriptContext.ENGINE_SCOPE); bindings.put(SCRIPT_VAR_t1, this); bindings.put(SCRIPT_VAR_t2, cTag); bindings.put(SCRIPT_VAR_t3, tAttribs Object ret = scriptEngine.eval(script, scriptEngine.getContext()); }
El problema se resuelve ahora después de crear el contexto solo una vez.