Миграция Нашорн в GraalVM - PullRequest
0 голосов
/ 27 июня 2019

Я использую движок Nashorn JS из OpenJDK 12. Кажется, Nashorn устарел.Я смотрю, какие есть доступные альтернативы.Я нашел GraalVM, но я не уверен, что это лучшее.Как я могу выполнить JavaScript GraalVM из Java?У вас есть какой-нибудь пример?

При использовании Nashorn из Java:

 NashornScriptEngineFactory nsef = new NashornScriptEngineFactory();
 ScriptEngine engine = nsef.getScriptEngine( BasicDBObject.class.getClassLoader() );
 final Bindings binding = engine.getContext().getBindings(ScriptContext.ENGINE_SCOPE);

1 Ответ

1 голос
/ 27 июня 2019

Follow GraalVM ScriptEngine

ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
Bindings bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("polyglot.js.allowHostAccess", true);
bindings.put("polyglot.js.allowHostClassLookup", (Predicate<String>) s -> true);
bindings.put("javaObj", new Object());
engine.eval("(javaObj instanceof Java.type('java.lang.Object'));"); // would not work without allowHostAccess and allowHostClassLookup

Обратите внимание на режим совместимости nashorn:

Эти параметры управляют правилами песочницы, применяемыми к оцениваемому коду JavaScript, и по умолчанию имеют значение false, если только приложение не было запущено в режиме совместимости с Nashorn (--js.nashorn-compat = true).

...