Darrel Schneider created GEODE-9474:
---------------------------------------
Summary: the Geode offheap feature will fail on java 16
Key: GEODE-9474
URL: https://issues.apache.org/jira/browse/GEODE-9474
Project: Geode
Issue Type: Bug
Components: offheap
Reporter: Darrel Schneider
In two different places geode offheap calls setAccessible. In one place it is
to call the "address" method. In the other it is to call the DIrectByteBuffer
constructor that passes an address in to the constructor. These will not work
on java 16 and later because it calls Method.setAccessible which is not allowed
under normal conditions starting with java 16 (see:
https://softwaregarden.dev/en/posts/new-java/illegal-access-in-java-16 ).
To workaround this failure set the JVM command line option:
--illegal-access=permit or use --add-opens.
The places that make the calls:
*
org.apache.geode.internal.offheap.AddressableMemoryManager#getDirectByteBufferAddress
*
org.apache.geode.internal.offheap.AddressableMemoryManager#createDirectByteBuffer
The "address" call does not need to use reflection and setAccessible but can
instead do it with casting. See
org.apache.geode.unsafe.internal.sun.nio.ch.DirectBuffer for how this is done.
The constructor issue is a bigger problem. This constructor can be called from
JNI NewDirectByteBuffer but needing to add native code to geode does not seem
worth the trouble. If some other solution can not be found then the above
workaround would need to be used if offheap is.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)