Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cannot run polyglot code with Spring Boot executable JAR and Java 21 #7625

Closed
michaeljohnalbers opened this issue Oct 18, 2023 · 11 comments
Closed
Assignees
Labels

Comments

@michaeljohnalbers
Copy link

Describe GraalVM and your environment :

  • GraalVM version or commit id if built from source: 21
  • CE or EE: CE
  • JDK version: 21
  • OS and OS Version: MacOS Ventura 13.6
  • Architecture: Apple Silicon
  • The output of java -Xinternalversion:
 OpenJDK 64-Bit Server VM (21+35-jvmci-23.1-b15) for bsd-aarch64 JRE (21+35-jvmci-23.1-b15), built on 2023-09-05T17:41:33Z by "graal" with clang Apple LLVM 12.0.0 (clang-1200.0.32.29)

Have you verified this issue still happens when using the latest snapshot?
With the Espresso dev build (https://github.com/graalvm/graalvm-ce-dev-builds/releases/download/24.0.0-dev-20231010_0216/espresso-community-dev-macos-aarch64.tar.gz) the issue does not happen. I cannot find a non-espresso build.

Describe the issue
When attempting to load a Javascript source file from code running within an executable JAR built by the Spring Boot Maven plugin (I'm using version 3.1.4), an exception is thrown. The exception seems to come from the Engine class initialization code. From what I've seen digging through the stack trace and code dependencies are assumed to reside on the file system. Based on this assumption, when the classloader returns the list of dependencies from the JAR file the call to convert the URL to a Path returns null which causes Path.of to throw an NPE.

Is this a bug or expected behavior? Have I misconfigured something? If this is expected behavior, then what is the correct way to package a GraalVM polyglot application?

Code snippet or code repository that reproduces the issue

https://github.com/michaeljohnalbers/graalvm-jar

Steps to reproduce the issue
Please include both build steps as well as run steps

  1. git clone --depth 1 https://github.com/michaeljohnalbers/graalvm-jar.git
  2. mvn clean package
  3. java -jar target/graalvm-jar-1.0-SNAPSHOT.jar

Expected behavior
GraalVM polyglot code initializes correctly and the program executes without issue. That is, no exception is thrown.

Additional context
Add any other context about the problem here. Specially important are stack traces or log output. Feel free to link to gists or to screenshots if necesary

Details
Exception in thread "main" java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:95)
	at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
	at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:65)
Caused by: java.lang.ExceptionInInitializerError
	at org.graalvm.polyglot.Engine.getImpl(Engine.java:438)
	at org.graalvm.polyglot.Source.getImpl(Source.java:140)
	at org.graalvm.polyglot.Source$Builder.build(Source.java:920)
	at com.modeanalytics.Main.main(Main.java:13)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	... 5 more
Caused by: java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:233)
	at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:296)
	at java.base/java.nio.file.Path.of(Path.java:148)
	at org.graalvm.polyglot.Engine$ClassPathIsolation.collectClassPathJars(Engine.java:1988)
	at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffleModule(Engine.java:1783)
	at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffle(Engine.java:1723)
	at org.graalvm.polyglot.Engine$1.searchServiceLoader(Engine.java:1682)
	at org.graalvm.polyglot.Engine$1.run(Engine.java:1668)
	at org.graalvm.polyglot.Engine$1.run(Engine.java:1663)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
	at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1663)
	at org.graalvm.polyglot.Engine$ImplHolder.<clinit>(Engine.java:186)
	... 10 more
@loicgreffier
Copy link

I can relate the exact same issue on Windows

java.lang.NullPointerException: null
        at java.base/java.util.Objects.requireNonNull(Objects.java:233) ~[na:na]
        at java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:215) ~[na:na]
        at java.base/java.nio.file.Path.of(Path.java:148) ~[na:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.collectClassPathJars(Engine.java:1988) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffleModule(Engine.java:1783) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffle(Engine.java:1723) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.searchServiceLoader(Engine.java:1682) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1668) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) ~[na:na]
        at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ImplHolder.<clinit>(Engine.java:186) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine.getImpl(Engine.java:438) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$Builder.build(Engine.java:736) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Context$Builder.build(Context.java:1925) ~[polyglot-23.1.0.jar!/:na]

I am using:

  • Graalvm-jdk-21.0.1+12.1 for building and running my application
  • Spring Boot 3.1.5
  • org.graalvm.polyglot.polyglot and org.graalvm.polyglot.js dependencies v23.1.0

Code snippet:

I confirm that the issue occurs when running the project as an executable jar: java -jar demo.jar.
It works running the project from IntelliJ.

@M4ikT
Copy link

M4ikT commented Nov 2, 2023

It seems, the modules are missing, if you start your application with java -jar demo.jar

Download latest graaljs-community-jvm for your platform from https://github.com/oracle/graaljs/releases/ and $JDK should link to your graalvm root folder and $GRAALVM_JARS should link to your modules folder

Important: Make sure you have downloaded the graaljs standalone package. If not, the modules folder doesn't exists in other non polyglot graalvm distributions.

#!/bin/sh

JDK=LINK TO GRAALVM ROOT FOLDER
GRAALVM_JARS=LINK TO GRAALVM MODULES FOLDER
$JDK/bin/java  --module-path=$GRAALVM_JARS/truffle-runtime.jar:$GRAALVM_JARS/jniutils.jar:$GRAALVM_JARS/polyglot.jar:$GRAALVM_JARS/launcher-common.jar:$GRAALVM_JARS/graaljs-launcher.jar:$GRAALVM_JARS/graaljs.jar:$GRAALVM_JARS/truffle-api.jar:$GRAALVM_JARS/graal-sdk.jar:$GRAALVM_JARS/graaljs-scriptengine.jar:$GRAALVM_JARS/tregex.jar:$GRAALVM_JARS/truffle-icu4j.jar -jar demo.jar

@loicgreffier
Copy link

loicgreffier commented Nov 2, 2023

Same issue with the configuration from above

lgr@PCLoic:/mnt/c/Users/LoicG/Downloads/graaljs-community-jvm-23.1.1-linux-amd64.tar/js-java-standalone-svm-java21/graaljs-community-23.1.1-linux-amd64$ export JDK=$PWD
lgr@PCLoic:/mnt/c/Users/LoicG/Downloads/graaljs-community-jvm-23.1.1-linux-amd64.tar/js-java-standalone-svm-java21/graaljs-community-23.1.1-linux-amd64$ export GRAALVM_JARS=$PWD/modules
lgr@PCLoic:/mnt/c/Users/LoicG/Downloads/graaljs-community-jvm-23.1.1-linux-amd64.tar/js-java-standalone-svm-java21/graaljs-community-23.1.1-linux-amd64$ $JDK/jvm/bin/java --module-path=$GRAALVM_JARS/truffle-runtime.jar:$GRAALVM_JARS/jniutils.jar:$GRAALVM_JARS/polyglot.jar:$GRAALVM_JARS/launcher-common.jar:$GRAALVM_JARS/graaljs-launcher.jar:$GRAALVM_JARS/graaljs.jar:$GRAALVM_JARS/truffle-api.jar:$GRAALVM_JARS/graal-sdk.jar:$GRAALVM_JARS/tregex.jar:$GRAALVM_JARS/truffle-icu4j.jar -jar ../demo-0.0.1-SNAPSHOT.jar

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.1.5)

2023-11-03T00:22:35.178+01:00  INFO 812 --- [           main] com.example.demo.DemoApplication         : Starting DemoApplication v0.0.1-SNAPSHOT using Java 21.0.1 with PID 812 (/mnt/c/Users/LoicG/Downloads/graaljs-community-jvm-23.1.1-linux-amd64.tar/js-java-standalone-svm-java21/demo-0.0.1-SNAPSHOT.jar started by lgr in /mnt/c/Users/LoicG/Downloads/graaljs-community-jvm-23.1.1-linux-amd64.tar/js-java-standalone-svm-java21/graaljs-community-23.1.1-linux-amd64)
2023-11-03T00:22:35.189+01:00  INFO 812 --- [           main] com.example.demo.DemoApplication         : No active profile set, falling back to 1 default profile: "default"
2023-11-03T00:22:38.741+01:00  INFO 812 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2023-11-03T00:22:38.782+01:00  INFO 812 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2023-11-03T00:22:38.783+01:00  INFO 812 --- [           main] o.apache.catalina.core.StandardEngine    : Starting Servlet engine: [Apache Tomcat/10.1.15]
2023-11-03T00:22:38.986+01:00  INFO 812 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2023-11-03T00:22:38.987+01:00  INFO 812 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3537 ms
2023-11-03T00:22:40.096+01:00  INFO 812 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2023-11-03T00:22:40.136+01:00  INFO 812 --- [           main] com.example.demo.DemoApplication         : Started DemoApplication in 6.826 seconds (process running for 10.116)
2023-11-03T00:22:47.060+01:00  INFO 812 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-11-03T00:22:47.061+01:00  INFO 812 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2023-11-03T00:22:47.062+01:00  INFO 812 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 0 ms
2023-11-03T00:22:47.277+01:00 ERROR 812 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.ExceptionInInitializerError] with root cause

java.lang.NullPointerException: null
        at java.base/java.util.Objects.requireNonNull(Objects.java:233) ~[na:na]
        at java.base/sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:296) ~[na:na]
        at java.base/java.nio.file.Path.of(Path.java:148) ~[na:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.collectClassPathJars(Engine.java:1988) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffleModule(Engine.java:1783) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ClassPathIsolation.createIsolatedTruffle(Engine.java:1723) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.searchServiceLoader(Engine.java:1682) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1668) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) ~[na:na]
        at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ImplHolder.<clinit>(Engine.java:186) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine.getImpl(Engine.java:438) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$Builder.build(Engine.java:736) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Context$Builder.build(Context.java:1925) ~[polyglot-23.1.0.jar!/:na]
        at com.example.demo.DemoController.run(DemoController.java:27) ~[classes!/:0.0.1-SNAPSHOT]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-6.0.13.jar!/:6.0.13]

The required jars are already embedded in the executable jar: truffle-api-23.1.0.jar, truffle-compiler-23.1.0.jar, truffle-enterprise-23.1.0.jar, truffle-runtime-23.1.0.jar, polyglot-23.1.0.jar, ...

Correct me if I am wrong, but the Embedded Languages documentation and the official Polyglot demo specify that, with the Maven dependencies, it should work on Oracle GraalVM 21 (without installing the js language manually like it is the case with Oracle GraalVM 17)

@Erik-mik
Copy link

Erik-mik commented Nov 6, 2023

Use this
java -Dpolyglotimpl.DisableClassPathIsolation=true
in your start application script. It worked for me.

@er1kv
Copy link

er1kv commented Nov 9, 2023

Use this java -Dpolyglotimpl.DisableClassPathIsolation=true in your start application script. It worked for me.

This solved my issues too, thanks!

@bahaa
Copy link

bahaa commented Nov 9, 2023

The solution @Erik-mik suggested works, but the engine runs in the interpreted mode. I get this warning:

WARNING: The polyglot engine uses a fallback runtime that does not support runtime compilation to native code.
Execution without runtime compilation will negatively impact the guest application performance.
The following cause was found: Truffle was loaded from the class-path. Use Truffle from the module-path instead. Did you disable polyglot class-path isolation?

@loicgreffier
Copy link

loicgreffier commented Nov 11, 2023

With the -Dpolyglotimpl.DisableClassPathIsolation=true option, it now works when I use Temurin 21 as Java runtime, but it fails with the following error when I use Oracle GraalVM 21:

2023-11-11T21:16:42.874+01:00 ERROR 22624 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed: java.lang.IllegalAccessError: superinterface check failed: class com.oracle.truffle.runtime.OptimizedTruffleRuntime (in unnamed module @0x23ceabc1) cannot access class com.oracle.truffle.compiler.TruffleCompilerRuntime (in module org.graalvm.truffle.compiler) because module org.graalvm.truffle.compiler does not export com.oracle.truffle.compiler to unnamed module @0x23ceabc1] with root cause

java.lang.IllegalAccessError: superinterface check failed: class com.oracle.truffle.runtime.OptimizedTruffleRuntime (in unnamed module @0x23ceabc1) cannot access class com.oracle.truffle.compiler.TruffleCompilerRuntime (in module org.graalvm.truffle.compiler) because module org.graalvm.truffle.compiler does not export com.oracle.truffle.compiler to unnamed module @0x23ceabc1
        at java.base/java.lang.ClassLoader.defineClass1(Native Method) ~[na:na]
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027) ~[na:na]
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) ~[na:na]
        at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:524) ~[na:na]
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:427) ~[na:na]
        at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:421) ~[na:na]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:714) ~[na:na]
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:420) ~[na:na]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) ~[na:na]
        at org.springframework.boot.loader.LaunchedURLClassLoader.loadClass(LaunchedURLClassLoader.java:149) ~[demo-0.0.1-SNAPSHOT.jar:0.0.1-SNAPSHOT]
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) ~[na:na]
        at com.oracle.truffle.runtime.enterprise.EnterpriseTruffle.G(stripped:21) ~[truffle-enterprise-23.1.0.jar!/:na]
        at com.oracle.truffle.polyglot.enterprise.EnterprisePolyglotImpl.getPriority(stripped:496) ~[truffle-enterprise-23.1.0.jar!/:na]
        at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Comparator.java:473) ~[na:na]
        at java.base/java.util.TimSort.countRunAndMakeAscending(TimSort.java:355) ~[na:na]
        at java.base/java.util.TimSort.sort(TimSort.java:220) ~[na:na]
        at java.base/java.util.Arrays.sort(Arrays.java:1308) ~[na:na]
        at java.base/java.util.ArrayList.sort(ArrayList.java:1804) ~[na:na]
        at java.base/java.util.Collections.sort(Collections.java:178) ~[na:na]
        at org.graalvm.polyglot.Engine.loadAndValidateProviders(Engine.java:1632) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1668) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$1.run(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) ~[na:na]
        at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1663) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$ImplHolder.<clinit>(Engine.java:186) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine.getImpl(Engine.java:438) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Engine$Builder.build(Engine.java:736) ~[polyglot-23.1.0.jar!/:na]
        at org.graalvm.polyglot.Context$Builder.build(Context.java:1925) ~[polyglot-23.1.0.jar!/:na]
        at com.example.demo.DemoController.run(DemoController.java:27) ~[classes!/:0.0.1-SNAPSHOT]
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:884) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.0.13.jar!/:6.0.13]
        at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.0.13.jar!/:6.0.13]
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-10.1.15.jar!/:na]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[na:na]

It is reproducible with the same code sample.

@Erik-mik is this option coming from any documentation ?

@bahaa
Copy link

bahaa commented Nov 12, 2023

I can confirm that the problem still happens with Spring Boot 3.2 new Nested Jar Support.

@chumer
Copy link
Member

chumer commented Nov 24, 2023

This issue contains an additional workaround:
oracle/graaljs#767 (comment)

I am working on a better solution for this.

@loicgreffier
Copy link

The issue seems fixed for me since I upgraded to v23.1.2.

I do not need to run my jar with the -Dpolyglotimpl.DisableClassPathIsolation=true option anymore.

Tested on:

  • Spring Boot v3.2.1
  • org.graalvm.polyglot polyglot and org.graalvm.polyglot js v23.1.2
  • OpenJDK Runtime Environment Temurin-21+35 (build 21+35-LTS)

@chumer
Copy link
Member

chumer commented Jan 29, 2024

Thank you for verifying @loicgreffier!
Yes, 23.1.2 is expected to fix it. Make sure you also bump the version of your GraalVM JDK 21 to 21.0.2 as well!

@chumer chumer closed this as completed Jan 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants