Skip to content

pompiuses/graalvm-javalin-demo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 

Repository files navigation

graalvm-javalin-demo

Environment Tested

  • Version: Oracle GraalVM 20.0.1+9.1 (build 20.0.1+9-jvmci-23.0-b12)
  • OS: MacOS 13.4.1 Ventura
  • Architecture: Apple M1 Max

Build the native image

From this directory do the following in a terminal.

  1. Build fat jar
    mvn clean package
  2. Start application with tracing agent
    java -agentlib:native-image-agent=config-output-dir=target/META-INF/native-image --enable-preview -jar target/graalvm-demo-1.0-SNAPSHOT-jar-with-dependencies.jar
  3. Then hit http://localhost:7070 in your browser to trigger all execution paths for the tracing agent to pick up.
  4. Stop the application.
  5. Build native image
    native-image -jar target/graalvm-demo-1.0-SNAPSHOT-jar-with-dependencies.jar -H:ConfigurationFileDirectories=target/META-INF/native-image -o target/app --no-fallback --enable-preview
  6. Start native image
    ./target/app

Problem

The following exception is thrown on native image startup (full stacktrace below):
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.Thread$Builder$OfVirtual.unstarted(java.lang.Runnable)

The tracing agent has, seemingly correctly, added the following to reflect-config.json, but to no effect:

{
  "name":"java.lang.Thread$Builder$OfVirtual",
  "methods":[{"name":"name","parameterTypes":["java.lang.String"] }, {"name":"unstarted","parameterTypes":["java.lang.Runnable"] }]
}

The reflective call which fail is done by Javalin's ConcurrencyUtil.kt.

Full stacktrace:

Exception in thread "main" java.lang.NoSuchMethodError: java.lang.Thread$Builder$OfVirtual.unstarted(java.lang.Runnable)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandleNatives.resolve(Target_java_lang_invoke_MethodHandleNatives.java:345)
	at [email protected]/java.lang.invoke.MethodHandleNatives.resolve(MethodHandleNatives.java:199)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:137)
	at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:76)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.MethodHandleIntrinsicImpl.execute(MethodHandleIntrinsicImpl.java:181)
	at org.graalvm.nativeimage.builder/com.oracle.svm.core.methodhandles.Util_java_lang_invoke_MethodHandle.invokeInternal(Target_java_lang_invoke_MethodHandle.java:142)
	at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:76)
	at [email protected]/java.lang.invoke.LambdaForm$NamedFunction.invokeWithArguments(LambdaForm.java:96)
	at [email protected]/java.lang.invoke.LambdaForm.interpretName(LambdaForm.java:949)
	at [email protected]/java.lang.invoke.LambdaForm.interpretWithArguments(LambdaForm.java:926)
	at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:82)
	at [email protected]/java.lang.invoke.MethodHandle.invokeBasic(MethodHandle.java:0)
	at [email protected]/java.lang.invoke.Invokers$Holder.invoke_MT(Invokers$Holder)
	at io.javalin.util.ReflectiveVirtualThreadBuilder.unstarted(ConcurrencyUtil.kt:117)
	at io.javalin.util.NamedVirtualThreadFactory.newThread(ConcurrencyUtil.kt:91)
	at [email protected]/java.util.concurrent.ThreadPerTaskExecutor.newThread(ThreadPerTaskExecutor.java:219)
	at [email protected]/java.util.concurrent.ThreadPerTaskExecutor$ThreadBoundFuture.<init>(ThreadPerTaskExecutor.java:337)
	at [email protected]/java.util.concurrent.ThreadPerTaskExecutor.submit(ThreadPerTaskExecutor.java:285)
	at [email protected]/java.util.concurrent.ThreadPerTaskExecutor.submit(ThreadPerTaskExecutor.java:293)
	at io.javalin.util.LoomUtil$LoomThreadPool.execute(ConcurrencyUtil.kt:63)
	at org.eclipse.jetty.io.SelectorManager.execute(SelectorManager.java:139)
	at org.eclipse.jetty.io.ManagedSelector.doStart(ManagedSelector.java:119)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:121)
	at org.eclipse.jetty.io.SelectorManager.doStart(SelectorManager.java:239)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:171)
	at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:114)
	at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:367)
	at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:75)
	at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:228)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at org.eclipse.jetty.server.Server.doStart(Server.java:428)
	at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:93)
	at io.javalin.jetty.JettyServer.start(JettyServer.kt:82)
	at io.javalin.Javalin.start(Javalin.java:171)
	at io.javalin.Javalin.start(Javalin.java:148)
	at demo.App.main(App.java:9)

About

graalvm-javalin-demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages