diff --git a/agent/src/main/java/com/walmartlabs/concord/agent/executors/runner/RunnerCommandBuilder.java b/agent/src/main/java/com/walmartlabs/concord/agent/executors/runner/RunnerCommandBuilder.java index 6d75476134..290e939faf 100644 --- a/agent/src/main/java/com/walmartlabs/concord/agent/executors/runner/RunnerCommandBuilder.java +++ b/agent/src/main/java/com/walmartlabs/concord/agent/executors/runner/RunnerCommandBuilder.java @@ -138,12 +138,17 @@ public String[] build() { l.add("-Dconcord.exposeDockerDaemon=" + exposeDockerDaemon); + // disable warnings for unoptimized js compiler (EnableJVMCI jvm opt is still experimental) + // https://www.graalvm.org/latest/reference-manual/embed-languages/#enable-optimization-on-openjdk-and-oracle-jdk + l.add("-Dpolyglot.engine.WarnInterpreterOnly=false"); + // Java 9+ requires additional add-opens for compatibility if (majorJavaVersion >= 9) { l.add("--add-opens"); l.add("java.base/java.lang=ALL-UNNAMED"); l.add("--add-opens"); l.add("java.base/java.util=ALL-UNNAMED"); + l.add("--enable-native-access=ALL-UNNAMED"); } // classpath diff --git a/cli/pom.xml b/cli/pom.xml index b1dcc5d545..6535015bfd 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -183,8 +183,10 @@ ${main.class} java.base/java.lang java.base/java.util + true + diff --git a/github-app-installation/pom.xml b/github-app-installation/pom.xml index bfdad77daa..7e8c5a6ad3 100644 --- a/github-app-installation/pom.xml +++ b/github-app-installation/pom.xml @@ -24,10 +24,6 @@ com.walmartlabs.concord concord-common - - io.takari.bpm - bpm-engine-impl - javax.validation validation-api diff --git a/it/runtime-v2/pom.xml b/it/runtime-v2/pom.xml index f08a0fead4..d4e17741af 100644 --- a/it/runtime-v2/pom.xml +++ b/it/runtime-v2/pom.xml @@ -120,6 +120,19 @@ + + + org.graalvm.polyglot + js + pom + test + + + org.graalvm.js + js-scriptengine + test + + com.walmartlabs.concord.server.plugins.noderoster diff --git a/it/runtime-v2/src/test/java/com/walmartlabs/concord/it/runtime/v2/FormIT.java b/it/runtime-v2/src/test/java/com/walmartlabs/concord/it/runtime/v2/FormIT.java index f22d1ec1cd..4ffbb2e6e8 100644 --- a/it/runtime-v2/src/test/java/com/walmartlabs/concord/it/runtime/v2/FormIT.java +++ b/it/runtime-v2/src/test/java/com/walmartlabs/concord/it/runtime/v2/FormIT.java @@ -269,7 +269,7 @@ private static void startCustomFormSession(ConcordRule concord, UUID instanceId, http.disconnect(); } - @SuppressWarnings({"unchecked", "UnstableApiUsage"}) + @SuppressWarnings({"unchecked"}) private static Map getDataJs(ConcordRule concord, UUID instanceId, String formName) throws Exception { URL url = new URL(concord.apiBaseUrl() + "/forms/" + instanceId + "/" + formName + "/form/data.js"); HttpURLConnection http = (HttpURLConnection) url.openConnection(); @@ -282,7 +282,7 @@ private static Map getDataJs(ConcordRule concord, UUID instanceI String str = CharStreams.toString(new InputStreamReader(is, StandardCharsets.UTF_8)); ScriptEngine se = new ScriptEngineManager().getEngineByName("js"); Object result = se.eval(str); - assertTrue(result instanceof Map); + assertInstanceOf(Map.class, result); return (Map) result; } finally { http.disconnect(); diff --git a/runtime/v1/impl/pom.xml b/runtime/v1/impl/pom.xml index 59de8ceee6..2bfb3752c2 100644 --- a/runtime/v1/impl/pom.xml +++ b/runtime/v1/impl/pom.xml @@ -105,6 +105,15 @@ io.takari.bpm bpm-engine-impl + + org.graalvm.polyglot + js + pom + + + org.graalvm.js + js-scriptengine + javax.inject javax.inject @@ -222,7 +231,6 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 package @@ -242,7 +250,11 @@ com.walmartlabs.concord.runner.Main + + true + + diff --git a/runtime/v1/model/pom.xml b/runtime/v1/model/pom.xml index 125f3acff1..9695b32d24 100644 --- a/runtime/v1/model/pom.xml +++ b/runtime/v1/model/pom.xml @@ -105,6 +105,12 @@ bpm-engine-impl test + + org.graalvm.polyglot + js + pom + test + org.mockito mockito-core diff --git a/runtime/v2/runner/pom.xml b/runtime/v2/runner/pom.xml index 1474b25bc0..fed921816d 100644 --- a/runtime/v2/runner/pom.xml +++ b/runtime/v2/runner/pom.xml @@ -121,8 +121,13 @@ - org.graalvm.js + org.graalvm.polyglot + polyglot + + + org.graalvm.polyglot js + pom org.graalvm.js @@ -273,7 +278,6 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.4 package @@ -293,7 +297,11 @@ com.walmartlabs.concord.runtime.v2.runner.Main + + true + + diff --git a/runtime/v2/runner/src/main/java/com/walmartlabs/concord/runtime/v2/runner/script/DefaultScriptEvaluator.java b/runtime/v2/runner/src/main/java/com/walmartlabs/concord/runtime/v2/runner/script/DefaultScriptEvaluator.java index b0f9ec34db..412d908d73 100644 --- a/runtime/v2/runner/src/main/java/com/walmartlabs/concord/runtime/v2/runner/script/DefaultScriptEvaluator.java +++ b/runtime/v2/runner/src/main/java/com/walmartlabs/concord/runtime/v2/runner/script/DefaultScriptEvaluator.java @@ -42,7 +42,7 @@ public class DefaultScriptEvaluator implements ScriptEvaluator { // https://www.graalvm.org/latest/reference-manual/js/JavaScriptCompatibility/#ecmascript-language-compliance - static Integer[] GRAAL_ES_VERSIONS = new Integer[]{ + static final Integer[] GRAAL_ES_VERSIONS = new Integer[]{ 3, 5, 6, @@ -55,8 +55,13 @@ public class DefaultScriptEvaluator implements ScriptEvaluator { 2020, 2021, 2022, + 2024 }; + private static final String DEFAULT_ES_VERSION = "6"; + + private static final String CTX_OPT_JS_ES_VERSION = "js.ecmascript-version"; + private static final Logger log = LoggerFactory.getLogger(DefaultScriptEvaluator.class); @@ -133,6 +138,9 @@ private org.graalvm.polyglot.Context.Builder getGraalEngineContextBuilder(Map new LinkedList<>(v.as(List.class))).build(); org.graalvm.polyglot.Context.Builder ctx = org.graalvm.polyglot.Context.newBuilder("js") .allowHostAccess(access); + + ctx.option(CTX_OPT_JS_ES_VERSION, DEFAULT_ES_VERSION); + for (Map.Entry entry : variables.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); @@ -143,7 +151,7 @@ private org.graalvm.polyglot.Context.Builder getGraalEngineContextBuilder(Map 8 )); then JDK_SPECIFIC_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED" fi +if (( $JAVA_VERSION > 24 )); then + echo "Applying JDK 25+ specific options..." + # added to suppress warnings for graalvm on jdk25 + # https://www.graalvm.org/release-notes/JDK_24/#polyglot-runtime + JDK_SPECIFIC_OPTS="${JDK_SPECIFIC_OPTS} --enable-native-access=ALL-UNNAMED" +fi + if [[ -z "${EXTRA_CLASSPATH}" ]]; then EXTRA_CLASSPATH="" fi @@ -52,6 +59,7 @@ ${JDK_SPECIFIC_OPTS} \ -Dfile.encoding=UTF-8 \ -Djava.net.preferIPv4Stack=true \ -Djava.security.egd=file:/dev/./urandom \ +-Dpolyglot.engine.WarnInterpreterOnly=false \ -Dconcord.conf=${CONCORD_CFG_FILE} \ -cp "${BASE_DIR}/lib/*:${BASE_DIR}/ext/*:${BASE_DIR}/classes:${EXTRA_CLASSPATH}" \ "${MAIN_CLASS}" diff --git a/server/impl/pom.xml b/server/impl/pom.xml index 95ec199f40..e6cbdb1788 100644 --- a/server/impl/pom.xml +++ b/server/impl/pom.xml @@ -318,8 +318,13 @@ graal-sdk - org.graalvm.js + org.graalvm.polyglot + polyglot + + + org.graalvm.polyglot js + pom org.graalvm.js diff --git a/targetplatform/pom.xml b/targetplatform/pom.xml index 7e68f3da03..a828476a41 100644 --- a/targetplatform/pom.xml +++ b/targetplatform/pom.xml @@ -54,7 +54,7 @@ 9.2.0 2.28.0 3.0.1-b12 - 22.0.0.2 + 25.0.2 1.6.5 5.0.4 33.3.1-jre @@ -581,15 +581,21 @@ guice-servlet ${guice.version} - + org.graalvm.js - js + js-scriptengine ${graalvm.version} - org.graalvm.js - js-scriptengine + org.graalvm.polyglot + polyglot + ${graalvm.version} + + + org.graalvm.polyglot + js ${graalvm.version} + pom org.graalvm.sdk @@ -630,6 +636,12 @@ io.takari.bpm bpm-engine-impl ${bpm.version} + + + org.graalvm.js + js + + io.takari.bpm