Hey guys,

not sure anyone tried to run tomee on java 9 but wondered if j9 module
system was kind of "fixed" since it was really broken last time i tested
and tried to run our simple-singleton sample today.

Have to admit I tend to think it is a feature breaiking java ecosystem but
here is a few more pragmatic feedback and how we can make this module
running:

- (easy) ORB/corba is not exported by default so we need to check by
reflection we can access it or not, I guess the fix for us is to remove
corba reference from our codebase, AFAIK it is not used and no more needed.
- (medium) bytecode reading: our current code base can read until java 8
bytecode and we need to upgrade xbean-asm-shaded and xbean-finder-shaded
(xbean snapshot is ready). We also need to upgrade the finders we have in
our codebase to ASM6 (java 9) but nothing hurting a lot - that's what we do
for each new java version.
- (unknown) we need all our dependencies to upgrade
- (open and likely hard if it takes into account our full stack) to run the
simple-singleton example I needed to add jaxb dependency (alternative is to
activate the module) and open a few modules, typically:

--add-modules java.logging --add-opens
java.logging/java.util.logging=ALL-UNNAMED
--add-opens=java.base/java.lang=ALL-UNNAMED

This globally request to add to our code the missing permission in the JVM
(keep in mind i ran simple-singleton which doesnt cover much of our
codebase/stack). The issue is this option is on the JVM so we can hide it
in tomee in catalina scripts and in arquillian through RemoteServer but for
embedded tests we'll require the user to do it.

We can likely rework a bit our code to not require them all (some are easy
to workaround like the logging one or the GET_PACKAGE usage for @Vetoed)
but when we'll start to create a module-info.java ourself and our stack
we'll not just be in the unamed module merged but in several modules we'll
need to maintain these references exactly like we did when we were still
handling OSGi and even if maven helps a bit it breaks the ability to change
a little bit the stack (it was common to upgrade cxf for instance) since it
depends if cxf export is stable or not.

I'm not yet sure how we want to tackle it. Good news is "yes it will work".
Bad one is "yes it will mess up each version".

I fear jigsaw can't be removed from java 9 anymore (not sure why to be
honest) but I start to wonder if we should do a system (subclassloader?) to
completely bypass it and keep user experience smooth.

Anyone having some other feedback?

Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> |  Blog
<https://blog-rmannibucau.rhcloud.com> | Old Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | JavaEE Factory
<https://javaeefactory-rmannibucau.rhcloud.com>

Reply via email to