liang huageng
liang huageng

Reputation: 11

OpenJdk 21 cannot support Chronicle-Queue

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());
}

Upvotes: 1

Views: 713

Answers (1)

Peter Lawrey
Peter Lawrey

Reputation: 533492

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.

Upvotes: 0

Related Questions