OpenJdk 21 cannot support Chronicle-Queue

305 views Asked by At

I tried to run Chronicle-Queue under openJdk21 following the method in the link address https://github.com/OpenHFT/OpenHFT/blob/ea/docs/Java-Version-Support.adoc, and the following error was thrown:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.openhft.chronicle.queue.impl.single.SingleChronicleQueueBuilder.<clinit>(SingleChronicleQueueBuilder.java:70)
    at net.openhft.chronicle.queue.ChronicleQueue.singleBuilder(ChronicleQueue.java:106)
    at com.example.virtualthreads.QueueTest.main(QueueTest.java:21)
Caused by: java.lang.IllegalStateException: Not found: sun.nio.ch.UnixFileDispatcherImpl
    at net.openhft.chronicle.core.OS.findClass(OS.java:131)
    at net.openhft.chronicle.core.OS.<clinit>(OS.java:100)
    ... 3 more
Caused by: java.lang.ClassNotFoundException: sun.nio.ch.UnixFileDispatcherImpl
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    at net.openhft.chronicle.core.OS.findClass(OS.java:128)
    ... 4 more

I passed in the following parameters:

--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
--add-exports=java.base/sun.nio.ch=ALL-UNNAMED
--add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED
--add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED
--add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
--add-opens=java.base/java.util=ALL-UNNAMED

I have written test code:

String basePath = "opt/queue";
try (ChronicleQueue queue = ChronicleQueue.singleBuilder(basePath).build()) {
  ExcerptAppender appender = queue.acquireAppender();
  appender.writeText("Hello World!");
  ExcerptTailer tailer = queue.createTailer();
  assertEquals("Hello World!", tailer.readText());
}
1

There are 1 answers

0
Peter Lawrey On

The 5.24.x version wasn't support for Java 21. However, 5.25eaX is supported for Java 21.

There are no command line argument changes between Java 17 and Java 21. If it works in Java 17, those arguments will work in 21. However, some very low-level details are different in the Java 21 JVM, which required some code changes.