-
Notifications
You must be signed in to change notification settings - Fork 3k
Description
Describe the bug
Polyglot application using truffle-enterprise fails due to missing org.graalvm.sdk:nativebridge artifact in bootlibraries. The org.graalvm.sdk:nativebridge artifact which is a truffle-enterprise dependency is put into main libraries. The list of polyglot artefacts which are placed into a boot libraries is in quarkus-core.jar's quarkus-extension.properties but it's missing the org.graalvm.sdk:nativebridge.
This causes the following exception in the polyglot application:
java.lang.ClassNotFoundException: org.graalvm.nativebridge.IsolateCreateException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:2985)
at java.base/java.lang.Class.getConstructor0(Class.java:3180)
at java.base/java.lang.Class.getConstructor(Class.java:2199)
at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:623)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1111)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1142)
at java.base/java.util.ServiceLoader$1.hasNext(ServiceLoader.java:1164)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1246)
at org.graalvm.polyglot.Engine.loadAndValidateProviders(Engine.java:1824)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1916)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1911)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:74)
at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1911)
at org.graalvm.polyglot.Engine$ImplHolder.(Engine.java:179)
at org.graalvm.polyglot.Engine.getImpl(Engine.java:518)
Expected behavior
The org.graalvm.sdk:nativebridge artefact should be in boot libraries because it's a truffle-enterprise dependency.
Actual behavior
Polyglot application throws ClassNotFoundException.
java.lang.ClassNotFoundException: org.graalvm.nativebridge.IsolateCreateException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490)
at java.base/java.lang.Class.getDeclaredConstructors0(Native Method)
at java.base/java.lang.Class.privateGetDeclaredConstructors(Class.java:2985)
at java.base/java.lang.Class.getConstructor0(Class.java:3180)
at java.base/java.lang.Class.getConstructor(Class.java:2199)
at java.base/java.util.ServiceLoader.getConstructor(ServiceLoader.java:623)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService(ServiceLoader.java:1111)
at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext(ServiceLoader.java:1142)
at java.base/java.util.ServiceLoader$1.hasNext(ServiceLoader.java:1164)
at java.base/java.util.ServiceLoader$2.hasNext(ServiceLoader.java:1246)
at org.graalvm.polyglot.Engine.loadAndValidateProviders(Engine.java:1824)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1916)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1911)
How to Reproduce?
Use https://github.com/timfel/graalpy-quarkus-dev.git with the following path.
diff --git a/build.gradle.kts b/build.gradle.kts
index 05d8f32..6239c70 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -25,6 +25,7 @@ dependencies {
implementation("io.quarkus:quarkus-rest")
testImplementation("io.quarkus:quarkus-junit5")
testImplementation("io.rest-assured:rest-assured")
+ implementation("org.graalvm.polyglot:python-isolate-darwin-aarch64:25.0.0")
}
graalPy {
diff --git a/src/main/java/com/acme/GraalPyContextProvider.java b/src/main/java/com/acme/GraalPyContextProvider.java
index 39b41f3..b9c5dae 100644
--- a/src/main/java/com/acme/GraalPyContextProvider.java
+++ b/src/main/java/com/acme/GraalPyContextProvider.java
@@ -33,6 +33,8 @@ public class GraalPyContextProvider {
GraalPyResources.extractVirtualFileSystemResources(vfs, tmpdir);
return GraalPyResources.contextBuilder(tmpdir)
.allowNativeAccess(false)
+ .option("engine.SpawnIsolate", "python")
+ .option("engine.IsolateMode", "external")
.build();
} catch (Exception ex) {
throw new RuntimeException("Could not initialize Python context", ex);
Output of uname -a
or ver
No response
Output of java -version
No response
Quarkus version or git rev
No response
Build tool (ie. output of mvnw --version
or gradlew --version
)
No response
Additional information
No response