#3 first and then work towards #1, then #2.  We can document what
"--add-open" options needs to be added to start client if running with
jdk11+ in the meantime.

I also have reservations about how #4 works. If it works, it is a good
alternation for #3.

On Wed, Oct 10, 2018 at 2:23 PM Sai Boorlagadda <sai.boorlaga...@gmail.com>
wrote:

> +1 to Dan's idea if its possible.
>
> There is a maven plugin to invoke javac twice with respective java targets.
>
> https://maven.apache.org/plugins/maven-compiler-plugin/examples/module-info.html
>
>
> On Wed, Oct 10, 2018 at 1:52 PM Galen O'Sullivan <gosulli...@pivotal.io>
> wrote:
>
> > er, lost the end of that first sentence there. I think that reducing
> > dependencies on Unsafe &c is a good goal regardless.
> >
> > On Wed, Oct 10, 2018 at 1:51 PM Galen O'Sullivan <gosulli...@pivotal.io>
> > wrote:
> >
> > > #1 sounds awesome but may be unrealistic given our advertised feature
> > set.
> > > I think that reducing dependencies on Unsafe &c
> > >
> > > If we can conditionally use Jigsaw modules for Java versions later
> than 8
> > > while maintaining Java 8 compatiblity, that seems like the best
> solution.
> > >
> > > +2 to Dan's idea if it allows this.
> > >
> > > On Wed, Oct 10, 2018 at 1:47 PM Jacob Barrett <jbarr...@pivotal.io>
> > wrote:
> > >
> > >> Here is a discussion from Google Guava project about compiling
> > >> module-info.java in Java 9+ and including it in a jar with classes
> > >> compiled
> > >> for Java 8.
> > >>
> > >> https://github.com/google/guava/issues/2970
> > >>
> > >>
> > >> On Wed, Oct 10, 2018 at 1:39 PM Jacob Barrett <jbarr...@pivotal.io>
> > >> wrote:
> > >>
> > >> > I like Dan’s idea! I would rather we work towards the correct
> > solution.
> > >> >
> > >> > > On Oct 10, 2018, at 1:22 PM, Dan Smith <dsm...@pivotal.io> wrote:
> > >> > >
> > >> > > #2 seems like the least hacky way to continue using things like
> > >> > > sun.misc.Unsafe. Could we just compile a module-info.java with
> Java
> > 9
> > >> and
> > >> > > bundle it? This would also help consumers of geode that want to
> use
> > >> Java
> > >> > 9
> > >> > > modules.
> > >> > >
> > >> > > I'm a little bit sceptical of this permit-reflect libary, seeing
> as
> > >> it's
> > >> > > been around for about 1 month, has 0 tests in the source that I
> can
> > >> see,
> > >> > > and seems to be tripling down on relying on sun.misc.Unsafe to do
> > >> stuff.
> > >> > > I'd be inclined to do #3 before this.
> > >> > >
> > >> > > -Dan
> > >> > >
> > >> > > On Wed, Oct 10, 2018 at 12:20 PM Owen Nichols <
> onich...@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
> > >> >
> > >> >
> > >>
> > >
> >
>


-- 
Cheers

Jinmei

Reply via email to