DISCLAIMER: The plan for Jakarta EE 11 is not yet final, so everything in this article is subject to change as the work progresses.
The work on defining the next major update of Jakarta EE has been going on for a while. Back in January 2023, the Jakarta EE Working Group Steering Committee defined the high-level guidelines for Jakarta EE 11. One of the items in these guidelines was to target Java 21. To accommodate this, the runtimes implementing Jakarta EE 11 will be tested on Java 21.
The Steering Committee is looking to establish a regular cadence of Jakarta EE releases approximately six months after a Java LTS release. With Java 21 scheduled for release in September 2023, the target date for Jakarta EE 11 is Q1 2024.
The overall theme for Jakarta EE 11 is Performance and Developer Productivity. Some specifications will need to make API changes to support language features introduced between Java 11 and Java 21, specifically: Virtual Threads and Records. With this release, Jakarta EE will continue becoming more CDI-centric and more streamlined.
Specification Updates
The following specifications will all have updated versions for Jakarta EE 11. Each of them is described in more detail below.
- Jakarta Annotations 3.0
- Jakarta Authentication 3.1
- Jakarta Authorization 3.0
- Jakarta Bean Validation 3.1
- Jakarta Concurrency 3.1
- Jakarta Contexts and Dependency Injection 4.1
- Jakarta Expression Language 6.0
- Jakarta Faces 5.0
- Jakarta Interceptors 2.2
- Jakarta Pages 4.0
- Jakarta Persistence 3.2
- Jakarta RESTful Web Services 4.0
- Jakarta Security 4.0
- Jakarta Servlet 6.1
- Jakarta WebSocket 2.2
Three additional specifications are candidates for inclusion in Jakarta EE 11. At the time of writing, the inclusion of the following specifications is being discussed in the Jakarta EE Platform project:
- Jakarta Data 1.0
- Jakarta MVC 3.0
- Jakarta NoSQL 1.0
Out of these, Jakarta Data is most likely to be included in Jakarta EE 11. Jakarta MVC and Jakarta NoSQL will then continue as independent specifications outside of the Platform.
The figure below shows an overview of how Jakarta EE 11 will look if these predictions fall through.
As you can see in the figure, about half of the specifications of the Jakarta EE Platform will be updated in Jakarta EE 11. Let’s look at the changes planned for each of the specifications.
Jakarta Annotations 3.0
A plan for Jakarta Annotations has not yet been provided, so it is a bit unclear what the scope of this release will be. Most likely it will involve updates related to the removal of the dependency on ManagedBeans.
Jakarta Authentication 3.1
Jakarta Authentication 3.1 will contain minor updates to support the overall goals of Jakarta Security. The changes include clarifications around state and concurrency as well as the removal of all references to the SecurityManager.
More details at: https://jakarta.ee/specifications/authentication/3.1/
Jakarta Authorization 3.0
The primary goal of Jakarta Authorization 3.0 is to future-proof the specification and make it more suitable for cloud deployments. This will be achieved by adding an API for programmatically registering policy providers, creating a replacement for java.security.Policy, and removing all references to the SecurityManager.
More details at: https://jakarta.ee/specifications/authorization/3.0/
Jakarta Bean Validation 3.1
Jakarta Bean Validation 3.1 will add support for Java Records. Records are classes that act as transparent carriers for immutable data and were introduced by JEP 395 in Java 16. Jakarta Bean Validation is also currently in the process of being renamed to Jakarta Validation.
More details at: https://jakarta.ee/specifications/bean-validation/3.1/
Jakarta Concurrency 3.1
The most significant feature of Jakarta Concurrency 3.1 is adding integration to Virtual Threads. Virtual Threads are lightweight threads and were introduced by JEP 444 in Java 21. Other changes in this release of Jakarta Concurrency are taking further steps toward being more CDI-centric.
More details at: https://jakarta.ee/specifications/concurrency/3.1/
Jakarta Contexts and Dependency Injection 4.1
The main objective of Jakarta Contexts and Dependency Injection 4.1 is to address several minor issues in the Specification, APIs, and TCK.
More details at: https://jakarta.ee/specifications/cdi/4.1/
Jakarta Expression Language 6.0
Jakarta Expression Language 6.0 makes the dependency on the java.desktop module optional. It also removes the references to the SecurityManager, as well as a small number of enhancements.
More details at: https://jakarta.ee/specifications/expression-language/6.0/
Jakarta Faces 5.0
Jakarta Faces 5.0 removes references to the SecurityManager and continues the alignment with CDI. This release also splits out the API into its own project.
More details at: https://jakarta.ee/specifications/faces/5.0/
Jakarta Interceptors 2.2
Jakarta Interceptors 2.2 is a minor update that adds a standard accessor to interceptor bindings.
More details at: https://jakarta.ee/specifications/interceptors/2.2/
Jakarta Pages 4.0
Jakarta Pages 4.0 removes functionality that was deprecated in previous releases, as well as updates to align with Jakarta Servlet 6.1 and Jakarta Expression Language 6.0.
More details at: https://jakarta.ee/specifications/pages/4.0/
Jakarta Persistence 3.2
The Jakarta Persistence 3.2 release comes with a lot of goodies for developers, including:
- Java Records will be usable as an embeddable type
- Added support for subqueries
- Programmatic schema management
- Stateless SecurityManager
- A wide range of additional functions and operators
This version also deprecates support for java.util.Calendar, java.util.Date, java.SQL.Time., and java.SQL.Timestamp.
More details at: https://jakarta.ee/specifications/persistence/3.2/
Jakarta RESTful Web Services 4.0
The goal of Jakarta RESTful Web Services 4.0 is to provide better alignment with Jakarta Contexts and Dependency Injection (CDI). Better integration with Jakarta Concurrency will also be explored. The support for @Context injection and related artifacts will be dropped.
More details at: https://jakarta.ee/specifications/restful-ws/4.0/
Jakarta Security 4.0
Jakarta Security 4.0 focuses on evolving the API in various ways. It will also provide APIs for the authorization theme, including interceptors and an abstraction for the permission store. This release will also remove all references to the SecurityManager.
More details at: https://jakarta.ee/specifications/security/4.0/
Jakarta Servlet 6.1
Jakarta Servlet 6.1 will provide small enhancements and adjustments to the specification and remove all references to the SecurityManager.
More details at: https://jakarta.ee/specifications/servlet/6.1/
Jakarta WebSocket 2.2
The focus of Jakarta WebSocket 2.2 is to remove all references to the SecurityManager. In addition to this, the release also contains minor updates and adjustments.
More details at: https://jakarta.ee/specifications/websocket/2.2/
Candidates for Inclusion
The following three specifications are candidates for inclusion in Jakarta EE 11. The discussion is still ongoing.
Jakarta Data 1.0
Jakarta Data will provide an API for easier data access by letting the developer split the persistence from the model with the repository interface, thus increasing the productivity of performing common database operations. This release will provide the CrudRepository feature and allow pagination on a repository with PageableRepository.
More details at: https://jakarta.ee/specifications/data/1.0/
Jakarta MVC 3.0
This is the third major release of Jakarta MVC. It will ensure alignment with Jakarta RESTful Web Services 4.0 and remove the requirement to support the Facelets view engine. Other features in this release are adding an accessor for FORM method overwrite field name and switching the CSRF default to implicit.
More details at: https://jakarta.ee/specifications/mvc/3.0/
Jakarta NoSQL 1.0
Jakarta NoSQL is a framework for streamlining the integration of Jakarta EE applications with NoSQL databases. This release defines mapping annotations for Entity, Id, and Column, as well as the DocumentTemplate, ColumnTemplate, and KeyValueTemplate specializations.
More details at: https://jakarta.ee/specifications/nosql/1.0/