diff --git a/CHANGELOG.md b/CHANGELOG.md index fbdf825..1206c3d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Changed - Durable subscriptions (by @erwindon) - Option to add client id +- #105 changed Nashorn javascript engine to GraalVM JS. ## [1.5.0] ### Removed diff --git a/pom.xml b/pom.xml index 642f1e6..9e5db99 100644 --- a/pom.xml +++ b/pom.xml @@ -89,6 +89,16 @@ jackson-databind 2.13.0 + + org.graalvm.js + js + 21.3.0 + + + org.graalvm.js + js-scriptengine + 21.3.0 + diff --git a/src/main/java/co/nordlander/a/A.java b/src/main/java/co/nordlander/a/A.java index d750dab..a843fa2 100755 --- a/src/main/java/co/nordlander/a/A.java +++ b/src/main/java/co/nordlander/a/A.java @@ -147,6 +147,7 @@ public enum Protocol { } public static void main(String[] args) { + System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); A a = new A(); try { a.run(args); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/co/nordlander/a/MessageDumpTransformer.java b/src/main/java/co/nordlander/a/MessageDumpTransformer.java index 385cdfe..c8ef6e1 100644 --- a/src/main/java/co/nordlander/a/MessageDumpTransformer.java +++ b/src/main/java/co/nordlander/a/MessageDumpTransformer.java @@ -22,10 +22,9 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; +import java.util.function.Predicate; -import javax.script.ScriptEngine; -import javax.script.ScriptEngineManager; -import javax.script.ScriptException; +import javax.script.*; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; @@ -39,9 +38,19 @@ public class MessageDumpTransformer { - protected ScriptEngineManager mgr = new ScriptEngineManager(); - protected ScriptEngine engine = mgr.getEngineByName("JavaScript"); + protected ScriptEngineManager mgr; + protected ScriptEngine engine; + protected Bindings bindings; protected Map context = new TreeMap<>(); + + public MessageDumpTransformer(){ + mgr = new ScriptEngineManager(); + engine = mgr.getEngineByName("js"); + bindings = engine.getBindings(ScriptContext.ENGINE_SCOPE); + bindings.put("polyglot.js.nashorn-compat", true); + bindings.put("polyglot.js.allowHostAccess", true); + bindings.put("polyglot.js.allowHostClassLookup", (Predicate) s -> true); + } public MessageDump transformMessage(MessageDump msg, String script) throws ScriptException, IOException{ if (StringUtils.isBlank(script)) { @@ -71,9 +80,9 @@ protected String toScript(final String script) throws IOException { } protected MessageDump doTransformMessage(MessageDump msg, String script) throws ScriptException{ - engine.put("msg", msg); + bindings.put("msg", msg); for (Map.Entry entry : context.entrySet() ) { - engine.put(entry.getKey(), entry.getValue()); + bindings.put(entry.getKey(), entry.getValue()); } engine.eval(script); return msg; diff --git a/src/test/java/co/nordlander/a/BaseTest.java b/src/test/java/co/nordlander/a/BaseTest.java index fcb2d51..7a2baab 100644 --- a/src/test/java/co/nordlander/a/BaseTest.java +++ b/src/test/java/co/nordlander/a/BaseTest.java @@ -93,6 +93,8 @@ public abstract class BaseTest { @Before public void setupJMS() throws Exception { + System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); + cf = getConnectionFactory(); connection = cf.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);