From c9492c7a86fabeb392a539dbb2df900ead8bb68f Mon Sep 17 00:00:00 2001 From: Petter Nordlander Date: Wed, 17 Nov 2021 07:45:50 +0100 Subject: [PATCH 1/3] Changed Nashorn to GraalVM with Nashorn compability enabled --- pom.xml | 10 ++++++++++ src/main/java/co/nordlander/a/A.java | 2 ++ .../java/co/nordlander/a/MessageDumpTransformer.java | 2 +- src/test/java/co/nordlander/a/BaseTest.java | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) 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..fa4fc1d 100755 --- a/src/main/java/co/nordlander/a/A.java +++ b/src/main/java/co/nordlander/a/A.java @@ -147,6 +147,8 @@ public enum Protocol { } public static void main(String[] args) { + System.setProperty("polyglot.js.nashorn-compat", "true"); + 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..76c73aa 100644 --- a/src/main/java/co/nordlander/a/MessageDumpTransformer.java +++ b/src/main/java/co/nordlander/a/MessageDumpTransformer.java @@ -40,7 +40,7 @@ public class MessageDumpTransformer { protected ScriptEngineManager mgr = new ScriptEngineManager(); - protected ScriptEngine engine = mgr.getEngineByName("JavaScript"); + protected ScriptEngine engine = mgr.getEngineByName("js"); protected Map context = new TreeMap<>(); public MessageDump transformMessage(MessageDump msg, String script) throws ScriptException, IOException{ diff --git a/src/test/java/co/nordlander/a/BaseTest.java b/src/test/java/co/nordlander/a/BaseTest.java index fcb2d51..7fe948c 100644 --- a/src/test/java/co/nordlander/a/BaseTest.java +++ b/src/test/java/co/nordlander/a/BaseTest.java @@ -93,6 +93,9 @@ public abstract class BaseTest { @Before public void setupJMS() throws Exception { + System.setProperty("polyglot.js.nashorn-compat", "true"); + System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); + cf = getConnectionFactory(); connection = cf.createConnection(); session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); From 05809bbd2e007ea9d3d1c0230de0a40c79fe4716 Mon Sep 17 00:00:00 2001 From: Petter Nordlander Date: Wed, 17 Nov 2021 07:49:29 +0100 Subject: [PATCH 2/3] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) 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 From 92872bfeba40d77bb068ea307a7d526928ce7810 Mon Sep 17 00:00:00 2001 From: Petter Nordlander Date: Wed, 17 Nov 2021 08:06:14 +0100 Subject: [PATCH 3/3] Added context params to make js engine behave less strict --- src/main/java/co/nordlander/a/A.java | 1 - .../nordlander/a/MessageDumpTransformer.java | 23 +++++++++++++------ src/test/java/co/nordlander/a/BaseTest.java | 1 - 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/co/nordlander/a/A.java b/src/main/java/co/nordlander/a/A.java index fa4fc1d..a843fa2 100755 --- a/src/main/java/co/nordlander/a/A.java +++ b/src/main/java/co/nordlander/a/A.java @@ -147,7 +147,6 @@ public enum Protocol { } public static void main(String[] args) { - System.setProperty("polyglot.js.nashorn-compat", "true"); System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); A a = new A(); try { a.run(args); } catch (Exception e) { diff --git a/src/main/java/co/nordlander/a/MessageDumpTransformer.java b/src/main/java/co/nordlander/a/MessageDumpTransformer.java index 76c73aa..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("js"); + 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 7fe948c..7a2baab 100644 --- a/src/test/java/co/nordlander/a/BaseTest.java +++ b/src/test/java/co/nordlander/a/BaseTest.java @@ -93,7 +93,6 @@ public abstract class BaseTest { @Before public void setupJMS() throws Exception { - System.setProperty("polyglot.js.nashorn-compat", "true"); System.setProperty("polyglot.engine.WarnInterpreterOnly", "false"); cf = getConnectionFactory();