The Jakarta EE community has been making great strides in its work on
Jakarta EE 9, and in the run-up to next Tuesday's Jakarta EE 9 Milestone
Release Party[1] I wanted to give the WildFly community an update on what's
been going on regarding EE 9 in WildFly and a heads up on what I expect
will be happening over the summer and the rest of this year.
As discussed in the Jakarta EE 9 Release Plan[2], EE 9 is primarily about
implementing the necessary change in the Jakarta EE APIs from the javax.*
package namespace to the jakarta.* namespace. It isn't about bringing new
functionality to end users; the focus is on providing a platform that all
of us in the EE ecosystem can use to adapt to the namespace change,
ensuring we're all in a solid position to take advantage of new features
and approaches to doing things that we'd like to see in EE 10.
The WildFly project is an important part of the EE ecosystem, so of course
we're going to participate in this. Besides work from WildFly community
members on the Jakarta platform (big shout out to Scott Marlow for his TCK
work) and the different specs, there's been background prototyping work
going on exploring how WildFly can provide an EE 9 compatible distribution.
That work is now far enough along that it's time to make it a part of the
main WildFly development work.
The javax.* to jakarta.* transition is a big task and it's going to take a
while to percolate through our ecosystem. I don't think it's good for
WildFly to stop providing new features and fixes to our community while we
take this on, so I'd like WildFly's primary distribution to continue to be
based on the EE 8 APIs. I think this should continue to be the case until
we begin work toward EE 10.
But we also need to provide an EE 9 server so our community can see what EE
9 will mean to them and so they can use us in their own EE 9 work. So I'd
like us to begin producing a tech preview/beta EE 9 variant of WildFly.
Ideally there would be at least one very early alpha type milestone over
the summer but I don't expect the first version to appear on the
wildfly.org/downloads page until some time after the WildFly 21 release,
perhaps late September or October. Then another version shortly after the
WildFly 22 release, probably in December or early January. Eventually I'd
like these to start coming out at the same time as the main WildFly
releases.
The main goal of these is to allow people to adapt to the jakarta.*
namespace change. However, I would also like them to serve as a bit of a
preview for how we see WildFly evolving in the future. For example WildFly
21 will still have the legacy Picketbox-based security as the default
security layer, but I'd prefer not to have that layer even be present in
the EE 9 variant.
Although I'd like this EE 9 variant to be an evolution from what we have
now, and a good way to adapt to the namespace change, it's important to
point out that any EE 10 variant of WildFly may evolve quite significantly
from what we'll be doing with EE 9. There is some uncertainty around how EE
10 will evolve and an expectation that Eclipse MicroProfile will need to
integrate into a base profile for EE 10, so what we're doing with EE 9 is
likely not going to align fully with our efforts in the future. We are
working on getting this notion better codified.
WildFly is a huge codebase, so maintaining two completely distinct flavors
of it is not feasible. Furthermore, for a long time at least some of the
binaries we ship will have been compiled against EE 8 APIs, with no native
EE 9 variant available. To make this work, the EE 9 server would be based
on a separate Galleon feature pack from what we use for the main
distribution. The large majority of the software artifacts that feature
pack references will be the same as what's in the EE 8 distribution.
However, as part of provisioning, any EE 8 content in the server will be
transformed (primarily bytecode transformation) to use the EE 9 APIs. Scott
Marlow, Richard Opalka and Jean-Francois Denise, with much appreciated
assistance from B.J. Hargrave and others on the Eclipse Transformer
project, have been making good progress on the needed transformation
technology, and Jean-Francois has done well with the needed Galleon
tooling. Jean-Francois's latest POC is able to provision a server that can
pass a significant chunk of the WildFly testsuite. That's a good sign that
it's time for this work to start surfacing in the main WildFly and WildFly
Core repos.
Expect to hear more discussion, JIRAs, PRs, etc about this in the coming
few weeks as we begin implementing changes in the main code base to make
the EE 9 variant more maintainable and as development branches get
underway. I'd love to hear your voices!
To be honest, when the need for the javax.* to jakarta.* transition came up
last year I was dreading dealing with it, but now I think it will be a lot
of fun. Part of the overall goal with what we've been doing with Galleon
has been to make it easier for users to have the WildFly they want. That
rightfully should include truly distinct flavors, not just different
subsets of a single flavor. This EE 9 work is going to be a great
opportunity for us to make progress on that goal.
Best regards,
Brian
[1]
https://twitter.com/JakartaEE/status/1273001150711844867
[2]
https://eclipse-ee4j.github.io/jakartaee-platform/jakartaee9/JakartaEE9Re...