Hi
Java SE has been through disruptive changes as well since 9 (most notably the module system, but also the new release process, incubator modules, preview features, etc.), so I believe it might be useful to consult the
OpenJDK community for input on how to deal with such changes in the ecosystem.
(By the way, note that OpenJDK incubator modules reside in a separate namespace (jdk.incubation.*) and thus inevitably lead to namespace changes as well when graduating)
I also believe that modularization is key to evolving the platform, so I'm in favor of the Big Bang approach and:
- (in case this hasn't been done yet: adding the Automatic-Module-Name attribute to all javax.* deliverables)
- copying all javax.* packages that aren't part of Java SE to the jakarta.* namespace, including JSR 330
- adding MVC in both namespaces (since there has already been a release in the javax.* namespace)
- adding Eclipse JNoSQL in the jakarta.* namespace
- not changing anything else API-wise, not even adding deprecations
- requiring Java SE 11
- not allowing any kind of mix-and-match within an application
so then a Jakarta EE 9 server could create 2 ModuleLayers, one for each namespace, and deploy applications on top of the appropriate layer.
For Jakarta EE 10, the jakarta.* namespace would be modularized and updated, and the platform revised to exploit the full potential of the module system.
Once the platform is modularized (i.e. including implementations of the specs):
- profiles would merely serve to communicate the set of modules that is available in a given server, since
- it should then be possible to create a "modular .ear/.war", and combine it with the server modules to create a custom runtime image that includes only what is needed
So the idea in the long term, is to require the server itself and the jakarta.* namespace (incl. implementations) to run on the module path (with no dependencies on automatic modules), while the javax.* namespace would
remain on the classpath forever.
Kind regards
Anthony
Hi,
Great contributions from everyone so far!
My thoughts:
- Go for a big-bang rename only release. This gives 3rd party libs, tools, vendors, etc, time to assimilate the change. Where possible, we should provide snapshots of those renamed APIs ASAP so that people can start testing them.
- Every application server will presumably come with some kind of compatibility layer, via bytecode manipulation, agents,etc. The Jakarta EE Platform Project should provide some generic tools, contributed by vendors and community, to ease other runtimes
migration. For users, the rename will only be a search&replace process, but it will be a headache for runtimes, most of which aren't heavily committed to Jakarta EE and are only API consumers. By making some compatibility tools available for those people,
and offering community support on their migration process, we show them we are really conscious of the work we have put on them and hopefully fight some FUD.
- I agree with those who have proposed making some radical changes taking advantage of this situation. Jakarta EE 9 should be a compatibility release, already marking some components as deprecated, not to be included in future versions. I'm particularly
thinking about JEB and the whole Stable APIs Project. Jakarta EE 10 should make sure it provides alternatives for all the removed stuff. Besides removing whole specs, this should also prune specific obsolete stuff (e.g.: in JSF, all the pre 2.0 API). I expect
most application servers to preserve EJB support for some time, so again, no big deal for users, but leaving it outside of the spec would be a huge break with the past. The EJB project could eventually see an update if someone is interested on it, but it would
be an individual release, not included on the umbrella Jakarta EE Platform API.
- Jakarta EE 10 development should start now, parallel to the package migration This was we can send two messages to the community: 1- sorry, we have to rename everything, we know this is work for you, but 2- this is only the beginning of a new era, we
are already looking forward the new opportunities and you can already participate in its future direction. We cannot just say "18 months have past, sorry we now have to rename everything, just after we finish this we'll start working about new features". This
would be the one release for breaking backward compatibility.
Regards,
Guillermo González de Agüero
[Contents of this email represent discussions
of the Jakarta EE Specification Committee over the last several meetings. The statements here have been reviewed by and represent the voice of the Jakarta EE Specification Committee]
As announced in the Update
on Jakarta EE Rights to Java Trademarks[1] post on Friday, future modification of the
javax
namespace will not be allowed. While this is not what was envisioned when Jakarta EE started, in many ways this in our best interest as the modification of
javax
would always have involved long-term legal and trademark restrictions.
To evolve Jakarta EE, we must transition
to a new namespace. The primary decisions we need to make as a community and industry are how and when. Given all delays and desires on everyone’s part to move forward as fast as possible, we would like to have this discussion openly as a community and conclude
in one month. It is the hope that in one month a clear consensus emerges and can be presented to the Specification Committee for final approval.
In an effort to bootstrap the conversation,
the Specification Committee has prepared two proposals for how we might move into the new namespace. These should be considered a starting point, more proposals are welcome. No final decisions have been made at this stage.
The guiding principle for Jakarta EE.next
will be to maximize compatibility with Jakarta EE 8 for future versions without stifling innovation.
Other proposals should incorporate the following
considerations and goals:
-
The new namespace will be
jakarta.*
-
APIs moved to the jakarta namespace maintain class names and
method signatures compatible with equivalent class names and method signatures in the javax.* namespace.
-
Even a small maintenance change to an API would
require a javax
to jakarta
change of that entire specification. Examples include:
-
Adding a value to an enum
-
Overriding/adding a method signature
-
Adding default methods in interfaces
-
Compensating for Java language changes
-
Binary compatibility for existing applications
in the javax
namespace is an agreed goal by the majority of existing vendors in the Jakarta EE Working Group and would be a priority in their products. However, there is a strong desire not to deter new implementers of the
jakarta
namespace from entering the ecosystem by requiring they also implement an equivalent
javax
legacy API.
-
There is no intention to change Jakarta EE 8 goals or timeline.
-
Community discussion on how to transition to
the jakarta
namespace will conclude Sunday, June 9th, 2019.
It is envisioned binary compatibility can
be achieved and offered by implementations via tooling that performs bytecode modification at either build-time, deploy-time or runtime. While there are open questions and considerations in this area, the primary goal of the discussion that must conclude is
how do we move forward with future modifications to the APIs themselves.
Proposal 1: Big-bang
Jakarta EE 9, Jakarta EE 10 New Features
The heart of this proposal
is to do a one-time move of API source from the javax
namespace to the jakarta
namespace with the primary goal of not prolonging industry cost and pain associated with the transition.
Were we to take this path, a compelling approach
would be to do the namespace rename and immediately release this as Jakarta EE 9. Additional modifications would be put into a Jakarta EE 10 which can be developed in parallel, without further delays.
-
Some or all Jakarta EE APIs under
javax
would move immediately into jakarta
as-is.
-
Any packages not moved from
javax
to jakarta
could be included in Jakarta EE, but would be forever
frozen and never move to the jakarta
namespace.
-
Jakarta EE 9 would be refocused as quick, stepping-stone
release, identical to Jakarta EE 8 with the exception of the javax
to jakarta
namespace change and immediately released.
-
Jakarta EE 10 would become the new release name for what we
imagined as Jakarta EE.next with only minor impact on timeline.
-
Work on Jakarta EE 10 could start immediately after rename
is completed in the GitHub source and need not wait for the Jakarta EE 9 release to actually ship.
Pros:
-
One-time coordination and cost to the industry, including;
conversion tools, users, enterprises, cloud vendors, IDE creators, platform vendors, trainers and book authors.
-
Easily understood rule: everything Jakarta EE
8 and before is javax,
Jakarta EE 9 and after is jakarta
-
Consistent with the
javax
to jakarta
Maven groupId change.
-
Highest degree of flexibility and freedom of action, post-change.
-
Industry would have the opportunity to begin digesting the
namespace change far in advance of any major new APIs or feature changes.
Cons:
-
Largest upfront cost for
everyone.
-
Specifications that may never be updated would still likely
be moved.
-
Decision to not move a specification is permanent and therefore
requires high confidence.
Decisions:
-
Which specifications, if any, would we opt not to move?
-
Would we take the opportunity to prune specifications from
Jakarta EE 9?
-
Do we change the language level in Jakarta EE 9 to Java SE
11 or delay that to Jakarta EE 10?
Proposal 2: Incremental
Change in Jakarta EE 9 and beyond
Evolve API source from
javax
to the jakarta
namespace over time on an as-needed basis. The most active specifications would immediately move in Jakarta EE 9. Every Jakarta EE release, starting with version 10 and beyond may involve some
javax
to jakarta
namespace transition.
-
The most active APIs would immediately move from
javax
to jakarta
-
APIs not changed or determined by the community
to be unlikely to change would stay in javax
-
Jakarta EE 9 would be a mix of
javax
and jakarta
packaged APIs
-
If a change was needed to a
javax
API post Jakarta EE 9 for any reason, that API would transition from javax
to jakarta.
-
Jakarta EE 10 would be a mix of
javax
and jakarta
packaged APIs, but a different mix than Jakarta EE 9.
-
At some point down the road, Jakarta EE xx, it
may be decided that the migration from javax
to jakarta
is “done” and the final APIs are moved.
Pros:
-
Cheaper up front cost and reduced immediate noise.
-
No need to move specifications unless there is an immediately
visible benefit.
-
Potential for less impact from API change overall.
Cons:
-
Prolonged coordination, cost and complexity to industry affecting
conversion tools, users, enterprises, cloud vendors, IDE creators, platform vendors, trainers and book authors.
-
Use of restricted
javax
namespace prolonged.
-
Frustration of “always changing” packages may deter application
developers and become a permanent perception of the brand.
-
Difficulty in remembering/knowing which Jakarta
EE release an API was moved. “Is Connector javax
or jakarta
in Jakarta EE 11?”
-
Difficulty in keeping the industry in sync.
-
New implementations may find themselves having
to deal with the javax
to jakarta
transition, unable to avoid legacy costs and therefore decide not to enter the space.
-
Transitive dependencies to other specifications may make incremental
change difficult or impossible.
-
Restrictions on what Java SE implementation can be used for
certification
Decisions:
Out of Scope
The following are very important community
discussions, but do not require a decision in the time-frame allotted:
-
Roadmap or release date for any Jakarta EE.next that would
contain new features
-
List of specifications that may be deprecated, pruned or removed
from Jakarta EE.next, if any
-
Specification text around backwards compatibility requirements,
if any
-
What profiles should be defined
However, depending on the path chosen, some
of these topics may require immediate resolution before the chosen path can be executed.
--
David Blevins
310-633-3852
_______________________________________________
jakartaee-platform-dev mailing list
jakartaee-platform-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit
https://www.eclipse.org/mailman/listinfo/jakartaee-platform-dev