geode-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anthony Baker <aba...@pivotal.io>
Subject Re: [DISCUSS] permit-reflect vs --add-opens for Java 11 support
Date Wed, 10 Oct 2018 20:31:46 GMT
Also, for #3, what does it look like to run a client application?  IOW, what are the command-line
arguments needed?

Anthony


> On Oct 10, 2018, at 1:29 PM, Anthony Baker <abaker@pivotal.io> wrote:
> 
> Do you have a listed of restricted API’s that are used by Geode?  Which libraries used
by Geode are affected?  Are these run-time only warnings or actual errors?
> 
> Anthony
> 
> 
> 
>> On Oct 10, 2018, at 12:20 PM, Owen Nichols <onichols@pivotal.io> wrote:
>> 
>> Goal:
>> 
>> Run Geode on Java 11 (GEODE-3 <https://issues.apache.org/jira/browse/GEODE-3>).
>> 
>> 
>> Problem:
>> 
>> Java 8 allows Geode (and its 3rd party libraries) full access to all Java APIs, including
internal APIs.  However, Java 11 restricts access to many of these APIs by default.
>> 
>> 
>> Solution #1:
>> 
>> Remove all usage of restricted APIs from all Geode code, and find replacements for
all 3rd party libraries that depend on restricted APIs.
>> 
>> Solution #2:
>> 
>> Adopt Java 11’s “Jigsaw" Module System and properly declare dependencies on restricted
APIs.
>> 
>> Solution #3:
>> 
>> Update all existing public and personal scripts, wrappers, IDE configurations, test
harnesses, and other java invocations to add a handful of --add-opens flags to the java commandline
to override the default Java 11 restrictions.
>> 
>> Solution #4:
>> 
>> Use the MIT-licensed permit-reflect <https://github.com/nqzero/permit-reflect>
library to programmatically override Java 11’s API restrictions.
>> 
>> 
>> In terms of feasibility:
>> #1 would be extremely difficult.  Geode has a large number of dependencies on internal
Java APIs in critical areas, and replacing them would be time-consuming, potentially destabilizing,
and very likely to negatively impact performance.
>> #2 is complex because we still need Geode to run on Java 8, so not using any Java
11 features seems safer than introducing multi-version jars, cross-compilation, or separate
releases per target Java platform.
>> #3 is easy enough to implement in scripts that are under source control, but users
or developers that have their own IDE configurations or test environments may struggle to
understand why they are getting errors and how to fix them.
>> #4 restores full Java8-like permissions with essentially just a change to main()
method. 
>> 
>> 
>> Which strategy do you prefer?  Java 11 test jobs are in the pipeline <https://concourse.apachegeode-ci.info/teams/main/pipelines/develop>
as of today — let’s make them green!
>> 
>> 
>> -Owen
> 


Mime
View raw message