How to run Aeron code with JDK 16 and JDK 17¶
Problem¶
JDK 16 changed the default access to the sun
package to deny - it used to be a warning. When running Aeron code on JDK 16 you may get an error similar to the following:
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make field private final java.util.Set sun.nio.ch.SelectorImpl.selectedKeys accessible: module java.base does not "opens sun.nio.ch" to unnamed module @XXXXXX
Solution¶
Add --add-opens java.base/sun.nio.ch=ALL-UNNAMED
or --illegal-access=permit
(JDK 16 only) to the JVM arguments.
Discussion¶
JDK 16 - via JEP 396 - strongly encapsulates JDK internals used by Agrona's TransportPoller
. To enable Aeron to run without error, you will need to permit access or explicitly open sun.nio.ch
.
With JDK 17, --illegal-access=permit
can no longer be used (see JEP 403), however, --add-opens java.base/sun.nio.ch=ALL-UNNAMED
is expected to work.