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)

Reply via email to