Skip to content

Conversation

jerboaa
Copy link
Contributor

@jerboaa jerboaa commented Apr 30, 2025

Add the equivalent of --add-opens=java.base/java.lang=ALL-UNNAMED to the quarkus runner jars' MANIFEST.MF.

The 3.9 update of JBoss Threads removes some Unsafe usages and replaces that by supported JDK APIs. The new code, however, uses field.setAccessible(true), requiring the Add-Opens manifest entry.

For the quarkus tests we add the option via the argLine parameter.

Closes: #47566 (together with the 3.9.1 jboss-threads update)

@quarkus-bot quarkus-bot bot added area/core area/dependencies Pull requests that update a dependency file labels Apr 30, 2025
@jerboaa
Copy link
Contributor Author

jerboaa commented Apr 30, 2025

Tested with for example vertx-http integration test on Mandrel-24.2.1.0-Final which failed prior this patch:

[INFO] --- quarkus:999-SNAPSHOT:build (default) @ quarkus-integration-test-vertx-http ---
[INFO] [quarkus-build-caching-extension] Quarkus previous configuration not found
[INFO] [quarkus-build-caching-extension] Quarkus build goal marked as not cacheable
[INFO] [quarkus-build-caching-extension] Quarkus previous configuration not found
[INFO] [quarkus-build-caching-extension] Quarkus build goal marked as not cacheable
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building native image source jar: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/quarkus-integration-test-vertx-http-999-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Building native image from /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/quarkus-integration-test-vertx-http-999-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildStep] Running Quarkus native-image plugin on MANDREL 24.2.1.0 JDK 24.0.1+9
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] /disk/graal/builds/mandrel-java24-24.2.1.0-Final/bin/native-image -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -J-Dsun.nio.ch.maxUpdateArraySize=100 -J-Dlogging.initial-configurator.min-level=500 -J-Duser.language=en -J-Duser.country=US -J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runtime.VertxLogDelegateFactory -J-Dvertx.disableDnsResolver=true -J-Dio.netty.leakDetection.level=DISABLED -J-Dio.netty.allocator.maxOrder=3 -H:+UnlockExperimentalVMOptions -H:IncludeLocales=en-US -H:-UnlockExperimentalVMOptions -J-Dfile.encoding=UTF-8 -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jdk=ALL-UNNAMED --features=io.quarkus.runner.Feature,io.quarkus.runtime.graal.DisableLoggingFeature,io.quarkus.runtime.graal.SkipConsoleServiceProvidersFeature -J--add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED -J--add-exports=java.security.jgss/sun.security.jgss=ALL-UNNAMED -J--add-opens=java.base/java.text=ALL-UNNAMED -J--add-opens=java.base/java.io=ALL-UNNAMED -J--add-opens=java.base/java.lang.invoke=ALL-UNNAMED -J--add-opens=java.base/java.util=ALL-UNNAMED -H:+UnlockExperimentalVMOptions -H:PrintAnalysisCallTreeType=CSV -H:-UnlockExperimentalVMOptions -H:+UnlockExperimentalVMOptions -H:BuildOutputJSONFile=quarkus-integration-test-vertx-http-999-SNAPSHOT-runner-build-output-stats.json -H:-UnlockExperimentalVMOptions -H:+UnlockExperimentalVMOptions -H:+GenerateBuildArtifactsFile -H:-UnlockExperimentalVMOptions -H:IncludeResources=.*.jks -H:EnableURLProtocols=http,https -H:+UnlockExperimentalVMOptions -H:+AllowFoldMethods -H:-UnlockExperimentalVMOptions -H:+UnlockExperimentalVMOptions -H:+ForeignAPISupport -H:-UnlockExperimentalVMOptions -J-Djava.awt.headless=true --no-fallback --link-at-build-time -H:+UnlockExperimentalVMOptions -H:+ReportExceptionStackTraces -H:-UnlockExperimentalVMOptions -H:-AddAllCharsets --enable-url-protocols=http -H:NativeLinkerOption=-no-pie --enable-monitoring=heapdump -H:+UnlockExperimentalVMOptions -H:-UseServiceLoaderFeature -H:-UnlockExperimentalVMOptions -J--add-exports=org.graalvm.nativeimage/org.graalvm.nativeimage.impl=ALL-UNNAMED --exclude-config io\.netty\.netty-codec /META-INF/native-image/io\.netty/netty-codec/generated/handlers/reflect-config\.json --exclude-config io\.netty\.netty-handler /META-INF/native-image/io\.netty/netty-handler/generated/handlers/reflect-config\.json quarkus-integration-test-vertx-http-999-SNAPSHOT-runner -jar quarkus-integration-test-vertx-http-999-SNAPSHOT-runner.jar
Warning: The option '-H:EnableURLProtocols=http,https' is experimental and must be enabled via '-H:+UnlockExperimentalVMOptions' in the future.
Warning: The option '-H:IncludeResources=.*.jks' is experimental and must be enabled via '-H:+UnlockExperimentalVMOptions' in the future.
Warning: Please re-evaluate whether any experimental option is required, and either remove or unlock it. The build output lists all active experimental options, including where they come from and possible alternatives. If you think an experimental option should be considered as stable, please file an issue.
Warning: Option 'DynamicProxyConfigurationResources' is deprecated and might be removed in a future release: This can be caused by a proxy-config.json file in your META-INF directory. Consider including proxy configuration in the reflection section of reachability-metadata.md instead.. Please refer to the GraalVM release notes.
========================================================================================================================
GraalVM Native Image: Generating 'quarkus-integration-test-vertx-http-999-SNAPSHOT-runner' (executable)...
========================================================================================================================
[1/8] Initializing...                                                                                    (2.9s @ 0.14GB)
 Java version: 24.0.1+9, vendor version: Mandrel-24.2.1.0-Final
 Graal compiler: optimization level: 2, target machine: x86-64-v3
 C compiler: gcc (redhat, x86_64, 14.2.1)
 Garbage collector: Serial GC (max heap size: 80% of RAM)
 5 user-specific feature(s):
 - com.oracle.svm.thirdparty.gson.GsonFeature
 - io.quarkus.runner.Feature: Auto-generated class by Quarkus from the existing extensions
 - io.quarkus.runtime.graal.DisableLoggingFeature: Adapts logging during the analysis phase
 - io.quarkus.runtime.graal.SkipConsoleServiceProvidersFeature: Skip unsupported console service providers when quarkus.native.auto-service-loader-registration is false
 - org.eclipse.angus.activation.nativeimage.AngusActivationFeature
------------------------------------------------------------------------------------------------------------------------
 9 experimental option(s) unlocked:
 - '-H:+AllowFoldMethods' (origin(s): command line)
 - '-H:+ForeignAPISupport' (origin(s): command line)
 - '-H:BuildOutputJSONFile' (origin(s): command line)
 - '-H:EnableURLProtocols' (alternative API option(s): --enable-http, --enable-https, --enable-http; origin(s): command line)
 - '-H:-UseServiceLoaderFeature' (origin(s): command line)
 - '-H:+GenerateBuildArtifactsFile' (origin(s): command line)
 - '-H:PrintAnalysisCallTreeType' (origin(s): command line)
 - '-H:IncludeResources': Use a resource-config.json in your META-INF/native-image/<groupID>/<artifactID> directory instead. (origin(s): command line)
 - '-H:AddOpens' (alternative API option(s): --add-opens java.base/java.lang=ALL-UNNAMED; origin(s): command line)
------------------------------------------------------------------------------------------------------------------------
Build resources:
 - 19.05GB of memory (30.6% of 62.23GB system memory, determined at start)
 - 22 thread(s) (100.0% of 22 available processor(s), determined at start)
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::arrayBaseOffset has been called by io.netty.util.internal.shaded.org.jctools.util.UnsafeRefArrayAccess (file:/home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/lib/io.netty.netty-common-4.1.119.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.shaded.org.jctools.util.UnsafeRefArrayAccess
WARNING: sun.misc.Unsafe::arrayBaseOffset will be removed in a future release
[2/8] Performing analysis...  [WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::loadLibrary has been called by com.aayushatharva.brotli4j.Brotli4jLoader in an unnamed module (file:/home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/lib/com.aayushatharva.brotli4j.brotli4j-1.16.0.jar)
WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled

******]                                                                  (10.7s @ 1.30GB)
   12,962 reachable types   (86.0% of   15,077 total)
   19,792 reachable fields  (52.8% of   37,484 total)
   66,834 reachable methods (56.4% of  118,494 total)
    4,274 types,    25 fields, and 1,146 methods registered for reflection
       62 types,    68 fields, and    55 methods registered for JNI access
        0 downcalls and 0 upcalls registered for foreign access
        4 native libraries: dl, pthread, rt, z
# Printing call tree csv file for methods to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/call_tree_methods_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.csv
# Printing call tree csv file for invokes to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/call_tree_invokes_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.csv
# Printing call tree csv file for targets to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/call_tree_targets_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.csv
# Printing list of used methods to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/used_methods_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.txt
# Printing list of used classes to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/used_classes_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.txt
# Printing list of used packages to: /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/reports/used_packages_quarkus-integration-test-vertx-http-999-SNAPSHOT-runner_20250430_183849.txt
[3/8] Building universe...                                                                               (2.4s @ 1.55GB)
[4/8] Parsing methods...      [*]                                                                        (1.8s @ 1.70GB)
[5/8] Inlining methods...     [***]                                                                      (1.0s @ 1.04GB)
[6/8] Compiling methods...    [***]                                                                     (11.4s @ 1.48GB)
[7/8] Laying out methods...   [**]                                                                       (3.9s @ 1.38GB)
[8/8] Creating image...       [**]                                                                       (3.1s @ 1.67GB)
  28.74MB (45.00%) for code area:    43,703 compilation units
  31.13MB (48.72%) for image heap:  359,517 objects and 168 resources
   4.01MB ( 6.28%) for other data
  63.88MB in total
------------------------------------------------------------------------------------------------------------------------
Top 10 origins of code area:                                Top 10 object types in image heap:
  13.70MB java.base                                            7.93MB byte[] for code metadata
   3.62MB java.xml                                             4.58MB byte[] for java.lang.String
   1.88MB svm.jar (Native Image)                               3.29MB java.lang.Class
   1.08MB q.jar                                                3.23MB java.lang.String
 981.68kB modified-io.vertx.vertx-core-4.5.14.jar              1.23MB byte[] for general heap data
 697.50kB org.jboss.resteasy.resteasy-core-6.2.12.Final.jar    1.09MB com.oracle.svm.core.hub.DynamicHubCompanion
 624.20kB io.netty.netty-buffer-4.1.119.Final.jar            810.43kB byte[] for reflection metadata
 482.51kB io.netty.netty-common-4.1.119.Final.jar            668.30kB java.util.HashMap$Node
 445.78kB com.fasterxml.jackson.core.jackson-core-2.18.3.jar 632.51kB java.lang.String[]
 414.98kB io.netty.netty-codec-http-4.1.119.Final.jar        539.02kB java.lang.Object[]
   4.60MB for 83 more packages                                 7.19MB for 3198 more object types
------------------------------------------------------------------------------------------------------------------------
Recommendations:
 HEAP: Set max heap for improved and more predictable memory usage.
 CPU:  Enable more CPU features with '-march=native' for improved performance.
------------------------------------------------------------------------------------------------------------------------
                       3.0s (7.4% of total time) in 481 GCs | Peak RSS: 2.66GB | CPU load: 14.17
------------------------------------------------------------------------------------------------------------------------
Build artifacts:
 /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/build-artifacts.json (build_info)
 /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/quarkus-integration-test-vertx-http-999-SNAPSHOT-runner (executable)
 /home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-native-image-source-jar/quarkus-integration-test-vertx-http-999-SNAPSHOT-runner-build-output-stats.json (build_info)
========================================================================================================================
Finished generating 'quarkus-integration-test-vertx-http-999-SNAPSHOT-runner' in 40.5s.
[INFO] [io.quarkus.deployment.pkg.steps.NativeImageBuildRunner] objcopy --strip-debug quarkus-integration-test-vertx-http-999-SNAPSHOT-runner
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 43302ms
[INFO] 
[INFO] --- failsafe:3.5.2:integration-test (default) @ quarkus-integration-test-vertx-http ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running io.quarkus.it.vertx.AccessLogTestCaseIT
Executing "/home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus-integration-test-vertx-http-999-SNAPSHOT-runner -Dquarkus.http.port=8081 -Dquarkus.http.ssl-port=8444 -Dtest.url=http://localhost:8081 -Dquarkus.log.file.path=/home/sgehwolf/Documents/openjdk/quarkus/quarkus-source/integration-tests/vertx-http/target/quarkus.log -Dquarkus.log.file.enable=true -Dquarkus.log.category."io.quarkus".level=INFO -Dquarkus.profile=prod -Dquarkus.native.enable-reports=true"
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2025-04-30 18:39:18,380 WARN  [io.qua.ver.htt.run.opt.HttpServerOptionsUtils] (main) When configuring TLS client authentication to be required, it is recommended to **NOT** set `quarkus.http.insecure-requests` to `enabled`. You can switch to `redirect` by setting `quarkus.http.insecure-requests=redirect`.
2025-04-30 18:39:18,398 INFO  [io.quarkus] (main) quarkus-integration-test-vertx-http 999-SNAPSHOT native (powered by Quarkus 999-SNAPSHOT) started in 0.058s. Listening on: http://0.0.0.0:8081 and https://0.0.0.0:8444
2025-04-30 18:39:18,398 INFO  [io.quarkus] (main) Profile prod activated. 
2025-04-30 18:39:18,398 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, smallrye-context-propagation, vertx]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.758 s -- in io.quarkus.it.vertx.AccessLogTestCaseIT
[INFO] Running io.quarkus.it.vertx.Http2TestCaseIT
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.530 s -- in io.quarkus.it.vertx.Http2TestCaseIT
[INFO] Running io.quarkus.it.vertx.NettyMainEventLoopGroupResourceIT
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.018 s -- in io.quarkus.it.vertx.NettyMainEventLoopGroupResourceIT
[INFO] Running io.quarkus.it.vertx.StaticResourcesIT
[INFO] Tests run: 6, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.076 s -- in io.quarkus.it.vertx.StaticResourcesIT
[INFO] Running io.quarkus.it.vertx.VertxProducerResourceIT
[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.135 s -- in io.quarkus.it.vertx.VertxProducerResourceIT

And also in JVM mode on JDK 24 with #47613:

[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/home/sgehwolf/.m2/repository/io/netty/netty-common/4.1.119.Final/netty-common-4.1.119.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
2025-04-30 18:42:33,253 WARN  [io.qua.res.mut.dep.ResteasyMutinyProcessor] (build-7) The quarkus-resteasy-mutiny extension is deprecated. Switch to Quarkus REST instead.
This extension adds support for Uni and Multi to RESTEasy Classic, without using the reactive execution model, as RESTEasy Classic does not use it. To properly integrate Mutiny and RESTEasy, use Quarkus REST. See https://quarkus.io/guides/getting-started-reactive for detailed instructions
[INFO] Running io.quarkus.it.vertx.EventBusTest
2025-04-30 18:42:34,162 INFO  [org.jbo.res.res.i18n] (main) RESTEASY002225: Deploying jakarta.ws.rs.core.Application: class io.quarkus.it.vertx.MyApplication
2025-04-30 18:42:34,406 INFO  [io.quarkus] (main) quarkus-integration-test-vertx 999-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 1.580s. Listening on: http://localhost:8081
2025-04-30 18:42:34,407 INFO  [io.quarkus] (main) Profile test activated. 
2025-04-30 18:42:34,407 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-mutiny, smallrye-context-propagation, smallrye-fault-tolerance, vertx]
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.022 s -- in io.quarkus.it.vertx.EventBusTest
[INFO] Running io.quarkus.it.vertx.faulttolerance.VertxRetryFallbackTest
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.638 s -- in io.quarkus.it.vertx.faulttolerance.VertxRetryFallbackTest
[INFO] Running io.quarkus.it.vertx.JsonReaderTest
2025-04-30 18:42:35,692 ERROR [org.jbo.res.res.i18n] (executor-thread-1) RESTEASY002010: Failed to execute: jakarta.ws.rs.BadRequestException: HTTP 400 Bad Request
	at org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:62)
	at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:81)
	at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:192)
	at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:87)
	at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:116)
	at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:560)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:452)
	at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:413)
	at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:415)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:378)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:356)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:70)
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:429)
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invokePropagateNotFound$6(SynchronousDispatcher.java:275)
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:154)
	at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)
	at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:157)
	at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:260)
	at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:86)
	at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:151)
	at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:97)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:637)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)
Caused by: jakarta.ws.rs.core.NoContentException: Cannot create JsonArray
	at io.quarkus.resteasy.runtime.vertx.JsonArrayReader.readFrom(JsonArrayReader.java:37)
	at io.quarkus.resteasy.runtime.vertx.JsonArrayReader.readFrom(JsonArrayReader.java:23)
	at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:99)
	at org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:60)
	... 30 more

2025-04-30 18:42:35,716 ERROR [org.jbo.res.res.i18n] (executor-thread-1) RESTEASY002010: Failed to execute: jakarta.ws.rs.BadRequestException: HTTP 400 Bad Request
	at org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:62)
	at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.proceed(AbstractReaderInterceptorContext.java:81)
	at org.jboss.resteasy.core.MessageBodyParameterInjector.inject(MessageBodyParameterInjector.java:192)
	at org.jboss.resteasy.core.MethodInjectorImpl.injectArguments(MethodInjectorImpl.java:87)
	at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:116)
	at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:560)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTargetAfterFilter(ResourceMethodInvoker.java:452)
	at org.jboss.resteasy.core.ResourceMethodInvoker.lambda$invokeOnTarget$2(ResourceMethodInvoker.java:413)
	at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invokeOnTarget(ResourceMethodInvoker.java:415)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:378)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:356)
	at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:70)
	at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:429)
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invokePropagateNotFound$6(SynchronousDispatcher.java:275)
	at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:154)
	at org.jboss.resteasy.core.interception.jaxrs.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:321)
	at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:157)
	at org.jboss.resteasy.core.SynchronousDispatcher.invokePropagateNotFound(SynchronousDispatcher.java:260)
	at io.quarkus.resteasy.runtime.standalone.RequestDispatcher.service(RequestDispatcher.java:86)
	at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler.dispatch(VertxRequestHandler.java:151)
	at io.quarkus.resteasy.runtime.standalone.VertxRequestHandler$1.run(VertxRequestHandler.java:97)
	at io.quarkus.vertx.core.runtime.VertxCoreRecorder$15.runWith(VertxCoreRecorder.java:637)
	at org.jboss.threads.EnhancedQueueExecutor$Task.doRunWith(EnhancedQueueExecutor.java:2651)
	at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2630)
	at org.jboss.threads.EnhancedQueueExecutor.runThreadBody(EnhancedQueueExecutor.java:1622)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1589)
	at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:11)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:11)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)
Caused by: jakarta.ws.rs.core.NoContentException: Cannot create JsonObject
	at io.quarkus.resteasy.runtime.vertx.JsonObjectReader.readFrom(JsonObjectReader.java:37)
	at io.quarkus.resteasy.runtime.vertx.JsonObjectReader.readFrom(JsonObjectReader.java:23)
	at org.jboss.resteasy.core.interception.jaxrs.AbstractReaderInterceptorContext.readFrom(AbstractReaderInterceptorContext.java:99)
	at org.jboss.resteasy.core.interception.jaxrs.ServerReaderInterceptorContext.readFrom(ServerReaderInterceptorContext.java:60)
	... 30 more

[INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.253 s -- in io.quarkus.it.vertx.JsonReaderTest
[INFO] Running io.quarkus.it.vertx.JsonWriterTest
[INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.069 s -- in io.quarkus.it.vertx.JsonWriterTest
[INFO] Running io.quarkus.it.vertx.VerticleTest
2025-04-30 18:42:36,016 WARN  [io.qua.it.ver.ver.MdcVerticle] (vert.x-eventloop-thread-8) Received message ### 65092b99-20eb-45ad-8fa3-c08deb48b93d
2025-04-30 18:42:36,067 WARN  [io.qua.it.ver.ver.MdcVerticle] (vert.x-eventloop-thread-8) Timer fired ### 65092b99-20eb-45ad-8fa3-c08deb48b93d
2025-04-30 18:42:36,071 WARN  [io.qua.it.ver.ver.MdcVerticle] (executor-thread-1) Blocking task executed ### 65092b99-20eb-45ad-8fa3-c08deb48b93d
[INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.194 s -- in io.quarkus.it.vertx.VerticleTest
[INFO] Running io.quarkus.it.vertx.VertxProducerResourceTest
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.017 s -- in io.quarkus.it.vertx.VertxProducerResourceTest
2025-04-30 18:42:36,231 INFO  [io.quarkus] (main) quarkus-integration-test-vertx stopped in 0.014s
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 18, Failures: 0, Errors: 0, Skipped: 0

And with -Dquarkus.package.jar.type=uber-jar (manually). All have the new MANIFEST.MF entry.

Note: This is also being added for JDKs < 24, but it does no harm there.

the propertiesCache in com.sun.naming.internal.ResourceManager -->
<!-- the add-opens java.base/java.lang=ALL-UNNAMED is here for
org.jboss.JDKSpecific.ThreadAccess.clearThreadLocals() -->
<argLine>${jacoco.agent.argLine} -Xmx1500m -XX:MaxMetaspaceSize=1500m -Djava.io.tmpdir="${project.build.directory}" ${surefire.argLine.additional} --add-opens java.naming/com.sun.naming.internal=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED</argLine>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This specific change raises a question: will our users be fine? I would not be terribly excited if they had to tweak their Surefire/Failsafe argLines.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you recall this being the case with 38d9997 ? If not, it looks like it won't impact them.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FWIW, I haven't seen an actual test failure if this isn't present. It just avoids ugly stack traces on quarkus shut-down. But open to other suggestions as well.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I wanted to clarify is: do we have this ugly stacktraces on a standard generated project with standard testing infra or is it fine?

If we do then we probably have an issue and either we find a way to fix it or we will have to document things in the migration guide and maybe include this in the generated template.

I'm not asking you to do the changes but it would be nice to have a status on this so that we can discuss it further if necessary.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gsmet Here is what I tried (with the patch in this PR):

$ cat run_quarkus_code_quickstart_quarkus_local.sh 
rm -rf code-with-quarkus*
JAVA_HOME=$1
if [ "${JAVA_HOME}_" == "_" ]; then
  echo "Usage: bash $0 <path-to-JDK>" 1>&2
  exit 1
fi
export JAVA_HOME
curl -O -J "https://code.quarkus.io/d?e=rest&cn=code.quarkus.io"
unzip code-with-quarkus.zip
cd code-with-quarkus
./mvnw -Dquarkus.platform.group-id=io.quarkus -Dquarkus.platform.version=999-SNAPSHOT clean package
$JAVA_HOME/bin/java -jar target/quarkus-app/quarkus-run.jar

And the ugly stacktraces are there when run on JDK 24.0.1 (for example). Output looks like:

  inflating: code-with-quarkus/.dockerignore  
  inflating: code-with-quarkus/mvnw.cmd  
  inflating: code-with-quarkus/mvnw  
WARNING: A restricted method in java.lang.System has been called
WARNING: java.lang.System::load has been called by org.fusesource.jansi.internal.JansiLoader in an unnamed module (file:/home/sgehwolf/.m2/wrapper/dists/apache-maven-3.9.9-bin/33b4b2b4/apache-maven-3.9.9/lib/jansi-2.4.1.jar)
WARNING: Use --enable-native-access=ALL-UNNAMED to avoid a warning for callers in this module
WARNING: Restricted methods will be blocked in a future release unless native access is enabled

WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::objectFieldOffset has been called by com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper (file:/home/sgehwolf/.m2/wrapper/dists/apache-maven-3.9.9-bin/33b4b2b4/apache-maven-3.9.9/lib/guava-33.2.1-jre.jar)
WARNING: Please consider reporting this to the maintainers of class com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper
WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release
[INFO] Scanning for projects...
[INFO] 
[INFO] ---------------------< org.acme:code-with-quarkus >---------------------
[INFO] Building code-with-quarkus 1.0.0-SNAPSHOT
[INFO]   from pom.xml
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- clean:3.2.0:clean (default-clean) @ code-with-quarkus ---
[INFO] 
[INFO] --- resources:3.3.1:resources (default-resources) @ code-with-quarkus ---
[INFO] Copying 1 resource from src/main/resources to target/classes
[INFO] 
[INFO] --- quarkus:999-SNAPSHOT:generate-code (default) @ code-with-quarkus ---
[INFO] 
[INFO] --- compiler:3.14.0:compile (default-compile) @ code-with-quarkus ---
[INFO] Recompiling the module because of changed source code.
[INFO] Compiling 1 source file with javac [debug parameters release 21] to target/classes
[INFO] 
[INFO] --- quarkus:999-SNAPSHOT:generate-code-tests (default) @ code-with-quarkus ---
[INFO] 
[INFO] --- resources:3.3.1:testResources (default-testResources) @ code-with-quarkus ---
[INFO] skip non existing resourceDirectory /home/sgehwolf/Documents/openjdk/quarkus/code-with-quarkus/code-with-quarkus/src/test/resources
[INFO] 
[INFO] --- compiler:3.14.0:testCompile (default-testCompile) @ code-with-quarkus ---
[INFO] Recompiling the module because of changed dependency.
[INFO] Compiling 2 source files with javac [debug parameters release 21] to target/test-classes
[INFO] 
[INFO] --- surefire:3.5.2:test (default-test) @ code-with-quarkus ---
[INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/home/sgehwolf/.m2/repository/io/netty/netty-common/4.1.119.Final/netty-common-4.1.119.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
[INFO] Running org.acme.GreetingResourceTest
2025-05-06 18:53:50,653 INFO  [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 1.537s. Listening on: http://localhost:8081
2025-05-06 18:53:50,654 INFO  [io.quarkus] (main) Profile test activated. 
2025-05-06 18:53:50,655 INFO  [io.quarkus] (main) Installed features: [cdi, rest, smallrye-context-propagation, vertx]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.898 s -- in org.acme.GreetingResourceTest
Exception in thread "vert.x-internal-blocking-1" java.lang.IllegalAccessError: module java.base does not open java.lang to unnamed module @345d053b; to use the thread-local-reset capability on Java 24 or later, use this JVM option: --add-opens java.base/java.lang=ALL-UNNAMED
	at org.jboss.threads.JDKSpecific$ThreadAccess.<clinit>(JDKSpecific.java:32)
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:13)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)
Exception in thread "executor-thread-1" java.lang.NoClassDefFoundError: Could not initialize class org.jboss.threads.JDKSpecific$ThreadAccess
	at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:13)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:1447)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.IllegalAccessError: module java.base does not open java.lang to unnamed module @345d053b; to use the thread-local-reset capability on Java 24 or later, use this JVM option: --add-opens java.base/java.lang=ALL-UNNAMED [in thread "vert.x-internal-blocking-1"]
	at org.jboss.threads.JDKSpecific$ThreadAccess.<clinit>(JDKSpecific.java:32)
2025-05-06 18:53:51,292 INFO  [io.quarkus] (main) code-with-quarkus stopped in 0.017s
	... 3 more
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- jar:3.4.1:jar (default-jar) @ code-with-quarkus ---
[INFO] Building jar: /home/sgehwolf/Documents/openjdk/quarkus/code-with-quarkus/code-with-quarkus/target/code-with-quarkus-1.0.0-SNAPSHOT.jar
[INFO] 
[INFO] --- quarkus:999-SNAPSHOT:build (default) @ code-with-quarkus ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 961ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.904 s
[INFO] Finished at: 2025-05-06T18:53:52+02:00
[INFO] ------------------------------------------------------------------------
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::allocateMemory has been called by io.netty.util.internal.PlatformDependent0$2 (file:/home/sgehwolf/Documents/openjdk/quarkus/code-with-quarkus/code-with-quarkus/target/quarkus-app/lib/main/io.netty.netty-common-4.1.119.Final.jar)
WARNING: Please consider reporting this to the maintainers of class io.netty.util.internal.PlatformDependent0$2
WARNING: sun.misc.Unsafe::allocateMemory will be removed in a future release
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2025-05-06 18:53:53,199 INFO  [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 999-SNAPSHOT) started in 0.478s. Listening on: http://0.0.0.0:8080
2025-05-06 18:53:53,204 INFO  [io.quarkus] (main) Profile prod activated. 
2025-05-06 18:53:53,204 INFO  [io.quarkus] (main) Installed features: [cdi, rest, smallrye-context-propagation, vertx]
^C2025-05-06 18:54:22,057 INFO  [io.quarkus] (Shutdown thread) code-with-quarkus stopped in 0.017s

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So my take is that we'd need to update the code templates to include --add-opens java.base/java.lang=ALL-UNNAMED argline for surefire, or add it to the migration guide.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've filed #47769 to track this work.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dmlloyd I'm a bit worried by us having to add --add-opens java.base/java.lang=ALL-UNNAMED to user apps Surefire configuration. There's no way around it?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No way that I'm aware of.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We could always just stop clearing thread locals though. That'd avoid using this class.

This comment has been minimized.

@jerboaa
Copy link
Contributor Author

jerboaa commented May 5, 2025

How should we proceed with this?

Add the equivalent of --add-opens=java.base/java.lang=ALL-UNNAMED
to the quarkus runner jars' MANIFEST.MF.

The 3.9 update of JBoss Threads removes some Unsafe
usages and replaces that by supported JDK APIs. The
new code, however, uses field.setAccessible(true), requiring
the Add-Opens manifest entry.

For the quarkus tests we add the option via the argLine
parameter.

Closes: quarkusio#47566 (together with the 3.9.1 jboss-threads update)
@jerboaa jerboaa force-pushed the fix_add_opens_JDKSpecifics branch from 4647818 to 82b8a53 Compare May 6, 2025 08:00
Copy link

quarkus-bot bot commented May 7, 2025

Status for workflow Quarkus CI

This is the status report for running Quarkus CI on commit 82b8a53.

✅ The latest workflow run for the pull request has completed successfully.

It should be safe to merge provided you have a look at the other checks in the summary.

You can consult the Develocity build scans.


Flaky tests - Develocity

⚙️ JVM Tests - JDK 17

📦 extensions/micrometer/deployment

io.quarkus.micrometer.deployment.binder.VertxTcpMetricsTest.testTcpMetrics - History

  • event executor terminated - java.util.concurrent.RejectedExecutionException
java.util.concurrent.RejectedExecutionException: event executor terminated
	at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:934)
	at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353)
	at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346)
	at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:836)
	at io.netty.util.concurrent.SingleThreadEventExecutor.execute0(SingleThreadEventExecutor.java:827)
	at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:817)
	at io.vertx.core.impl.EventLoopExecutor.execute(EventLoopExecutor.java:35)

@jerboaa
Copy link
Contributor Author

jerboaa commented May 7, 2025

@gsmet Can we get this merged please, we are not getting any good signal in our CI for JDK 24/25 and risk not seeing issues we need to act on. Happy to follow up with whatever is needed. Thanks!

Copy link
Contributor Author

@jerboaa jerboaa left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've created #47769 for the follow-up work that still needs to happen after this. This PR should be good to go, though.

the propertiesCache in com.sun.naming.internal.ResourceManager -->
<!-- the add-opens java.base/java.lang=ALL-UNNAMED is here for
org.jboss.JDKSpecific.ThreadAccess.clearThreadLocals() -->
<argLine>${jacoco.agent.argLine} -Xmx1500m -XX:MaxMetaspaceSize=1500m -Djava.io.tmpdir="${project.build.directory}" ${surefire.argLine.additional} --add-opens java.naming/com.sun.naming.internal=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED</argLine>
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've filed #47769 to track this work.

@gsmet gsmet merged commit 1c093e3 into quarkusio:main May 8, 2025
57 checks passed
@quarkus-bot quarkus-bot bot added this to the 3.23 - main milestone May 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[GraalVM for JDK 24+] org.jboss.threads.JDKSpecific$ThreadAccess needs --add-opens java.base/java.lang=ALL-UNNAMED

4 participants