Can you check if this is specific to 15.3, or does it also not work with e.g. 15.2?
Attila. > On 2021. Jul 15., at 12:49, Andreas Mueller <a...@iit.de> wrote: > > Tested it again with listing the engine right befor getByName: > > List<ScriptEngineFactory> factories = manager.getEngineFactories(); > for (int i = 0; i < factories.size(); i++) { > ctx.logSwiftlet.logInformation(ctx.streamsSwiftlet.getName(), "name=" + > factories.get(i).getEngineName() + > ", version=" + factories.get(i).getEngineVersion() + ", language > name=" + factories.get(i).getLanguageName() + > ", language version=" + factories.get(i).getLanguageVersion() + > ", names=" + factories.get(i).getNames()); > } > engine = manager.getEngineByName((String) > entity.getProperty("script-language").getValue()); > > It is listed but returns null. This code is executed by a dedicated class > loader. > > -- > Andreas Mueller > IIT Software GmbH > http://www.swiftmq.com <http://www.swiftmq.com/> > > <swiftmq_logo_positiv.png> > >> On 15. Jul 2021, at 10:59, Andreas Mueller <a...@iit.de >> <mailto:a...@iit.de>> wrote: >> >> Hi Attila, >> >> thanks but didn’t work in my environment. >> >> Tried every combination (using “nashorn”, “JavaScript” as name, using class >> path, using module path). >> >> Fact is, it lists the Nashorn engine correctly: >> >> ScriptEngineManager manager = new ScriptEngineManager(); >> List<ScriptEngineFactory> factories = manager.getEngineFactories(); >> for (int i = 0; i < factories.size(); i++) { >> ctx.logSwiftlet.logInformation(ctx.streamsSwiftlet.getName(), "name=" + >> factories.get(i).getEngineName() + >> ", version=" + factories.get(i).getEngineVersion() + ", language >> name=" + factories.get(i).getLanguageName() + >> ", language version=" + factories.get(i).getLanguageVersion() + >> ", names=" + factories.get(i).getNames()); >> } >> >> 2021-07-15 10:51:37.948/sys$streams/INFORMATION/name=OpenJDK Nashorn, >> version=15.3, language name=ECMAScript, language version=ECMA - 262 Edition >> 5.1, names=[nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, >> ecmascript] >> >> But return null here: >> >> engine = manager.getEngineByName(“JavaScript”); >> >> I suspect it might have to do with class loaders as we use a dedicated class >> loader for every script: >> >> ScriptEngineManager manager = new ScriptEngineManager(); >> ClassLoader classLoader = createClassLoader(); >> streamContext.classLoader = classLoader; >> Thread.currentThread().setContextClassLoader(classLoader); >> >> Thanks, >> Andreas >> >> -- >> Andreas Mueller >> IIT Software GmbH >> http://www.swiftmq.com <http://www.swiftmq.com/> >> >> <swiftmq_logo_positiv.png> >> >>> On 13. Jul 2021, at 16:01, Attila Szegedi <szege...@gmail.com> wrote: >>> >>> I’m honestly not sure. I have this very small test program: >>> >>> import javax.script.*; >>> >>> public class X { >>> public static void main(String[] args) throws ScriptException { >>> ScriptEngineManager factory = new ScriptEngineManager(); >>> ScriptEngine engine = factory.getEngineByName("JavaScript"); >>> engine.eval("function f() { print('Hello, World!'); } f()"); >>> } >>> } >>> >>> if I put it in a directory where I checked out Nashorn repo, and run “ant >>> jar” to build the JAR file and run: >>> >>> java --module-path build/nashorn/dist:build/nashorn/dependencies X.java >>> >>> It prints "Hello, World!” as expected, so it definitely find the engine >>> under the name “JavaScript". I can also run it with classpath instead of >>> module path: >>> >>> java -cp >>> build/nashorn/dist/nashorn.jar:build/nashorn/dependencies/asm-7.3.1.jar:build/nashorn/dependencies/asm-util-7.3.1.jar >>> X.java >>> >>> and that works too. Do you have the dependencies (ASM) too? >>> >>> Attila. >>> >>>> On 2021. Jul 13., at 15:33, Andreas Mueller <a...@iit.de> wrote: >>>> >>>> Hi, >>>> >>>> I’ve added Nashorn to Java 15 and it is properly displayed when listing >>>> the engines: >>>> >>>> 2021-07-13 15:14:30.233/sys$streams/INFORMATION/starting, available >>>> Scripting Engines: >>>> 2021-07-13 15:14:30.246/sys$streams/INFORMATION/name=OpenJDK Nashorn, >>>> version=15.3, language name=ECMAScript, language version=ECMA - 262 >>>> Edition 5.1, names=[nashorn, Nashorn, js, JS, JavaScript, javascript, >>>> ECMAScript, ecmascript] >>>> >>>> However, when I get the engine with name “JavaScript” it returns null: >>>> >>>> engine = manager.getEngineByName((String) >>>> entity.getProperty("script-language").getValue()); >>>> if (engine == null) >>>> throw new Exception("Engine for script-language '" + >>>> entity.getProperty("script-language").getValue() + "' not found!"); >>>> >>>> 2021-07-13 15:14:30.361/ERROR/Exception occured: java.lang.Exception: >>>> Engine for script-language 'JavaScript' not found! >>>> >>>> Any ideas what the problem could be? >>>> >>>> Thanks, >>>> Andreas >>>> -- >>>> Andreas Mueller >>>> IIT Software GmbH >>>> http://www.swiftmq.com <http://www.swiftmq.com> >>>> >>>> >>> >> >