Version 9.1 makes Jakarta EE compatible with Java SE 11. This is the only significant change. Few API changes, nothing incompatible. Version 9.1 is functionally equivalent to Jakarta EE 9.
The focus is on removing the trademarked Java name from the various specifications. This includes moving to a new package name of jakarta.*. In that one specific sense, this is a breaking release, as projects must be updated to the new package to run on EE 9 servers. After changing package name, existing apps will run well with few or no other changes.
The goal of the Jakarta EE 9 release is to deliver a set of specifications functionally similar to Jakarta EE 8 but in the new Jakarta EE 9 namespace jakarta.*.
In addition, the Jakarta EE 9 release removes specifications from Jakarta EE 8 that were old, optional, or deprecated in order to reduce the surface area of the APIs to ensure that it is easier for new vendors to enter the ecosystem – as well as reduce the burden on implementation, migration, and maintenance of these old APIs.
Predominantly, the project team sees Jakarta EE 9 as a tooling release…
Even though you will likely be able to expect upward compatibility in behavior, the naming changes means version 9 and later are not be a drop-in binary replacement. Not the end of the world. This may mean as little as you changing the import package names in your various class files. Read this and this for details and links.
As part of the transition from Oracle, the Eclipse team re-released Java EE 8 as Jakarta EE 8 using their new infrastructure for housing code and making builds. Same EE behavior, same internal naming and package structure. So the issues discussed below about Java EE Web Profile versus Java EE Full Platform still apply.
Jakarta EE 8 uses the javax.* package naming, borrowed from Oracle Corp. Version 9 changes the package naming to jakarta.*.
• Contexts and Dependency Injection for the Java EE Platform 2.0
• Dependency Injection for Java 1.0
• Java EE Security API 1.0
• Java Authentication Service Provider Interface for Containers (JASPIC) 1.1
Servlet-oriented (Tomcat & Jetty)
As a lighter alternative to using a Web Profile implementation, you could start with a Java Servlet/JSP implementation such as Apache Tomcat or Eclipse Jetty. While not official as a profile, this approach is very popular. Sometimes known as a web container.
IMHO, this should have long ago been formalized as a JavaEE / Jakarta EE profile. Given the huge popularity of Tomcat & Jetty, the need and benefit of a formal profile seems obvious to me.
When using this setup, you may selectively add independent libraries to benefit selectively from the various Java EE technologies. For example, for my own work building web apps using Vaadin Flow, I use Java SE with Tomcat. Sometimes I add a Bean Validation implementation library manually as that is all I need from the Java EE list of technologies.
A few of the Jakarta EE specifications have been re-engineered to work directly with Java SE based apps without a Jakarta EE server. And more such re-engineering is being planned. Implementations of such specs could be used with Tomcat or Jetty.
Of course, at some point rather than keeping adding more Jakarta EE oriented libraries to your Tomcat/Jetty project, it might make more sense to just switch to using a server compliant with one of the wider Jakarta EE profiles.
Full Java EE
The following technologies are required:
• All the items in Web Profile
• EJB 3.2 (except for EJB entity beans and associated EJBQL, which have been made optional)
• JMS 2.0
• JavaMail 1.6
• Connector 1.7
• WebServices 1.4
• Concurrency Utilities 1.0
• Batch1.0
• Java EE Management 1.1
• JACC 1.5
• JSP Debugging 1.0
• Web Services Metadata 2.1
The following technologies are optional:
• EJB 3.2 and earlier entity beans and associated EJB QL
• JAX-RPC 1.1
• JAXR 1.0
• Java EE Deployment 1.2
Diagram
Here is a diagram to show the nested groups of requirements.
The list above this diagram may be more accurate; this diagram has not been double-checked.