With so much attention being focused on the Spring framework and its associated projects such as Spring Boot and Spring Data, we tend to lose sight of the Jakarta Enterprise Edition (JEE). The original framework was formerly known as J2EE/Java EE.
A few years ago I wrote about the then updated Jakarta EE Framework. Let’s have a look at what’s been happening in that side of the Java ecosystem.
JEE was really the foundation for enterprise development for many of us older developers. While Spring has since won the developer mindshare war for daily enterprise work, Jakarta EE hasn’t just been sitting quietly in a corner.
In fact, the Jakarta EE 12 release cycle is currently one of the more interesting developments in the Java ecosystem. It’s the first version to fully align with the Java 25 LTS baseline. It’s foundational, evolving fast, and every Java developer should know about Jakarta EE.
If you haven’t looked at JEE in a while, you might be surprised to find that it has moved away from the heavyweight application server paradigm. Modern implementations like Open Liberty and Payara can run the ultra-lightweight MicroProfile microservices architecture.
Jakarta EE powers enterprise Java development
Jakarta EE powers enterprise Java development, and major frameworks all rely on it. Whether you’re building applications with Spring, Quarkus or Helidon, you’re relying on Jakarta EE technologies, often without even realizing it.
Jakarta EE is not a competitor to these frameworks, but rather a foundational layer on which they build and run. If you use Spring Data JPA, you’re using the Jakarta Persistence API. If you’re writing web controllers or using HTTP filters, you’re relying on Jakarta Servlet under the hood.
This is the importance of Jakarta EE: it standardises the APIs that power the vast majority of Java enterprise applications, regardless of the third-party frameworks developers might use.
Even Spring had to make sweeping changes in response to Jakarta EE’s namespace migration when it switched from the javax.* to jakarta.* top-level package names. This was not just a name change; it was an acknowledgment of Jakarta EE’s centrality in the Java ecosystem.
Another important aspect of Jakarta EE is that it is vendor-neutral. This means that multiple vendors implement the Jakarta EE specifications, allowing you to choose the best runtime based on your needs without vendor lock-in.
Jakarta EE 12: Robust and Flexible
The theme for the upcoming version 12 release (targeted for late 2026) is Robust and Flexible. Here is what is changing:
-
Java 25 Alignment: JEE 12 is officially targeting Java 25. This means the specifications are being updated to leverage new features such as compact object headers and flexible constructor bodies.
-
Virtual Thread Support: The Jakarta Concurrency 3.2 spec is being refined to ensure that the container handles virtual threads natively. This is where the magic of virtual threads happens. The
@ManagedExecutorDefinition(virtual=true)attribute is the key to high-scale concurrency. -
New Specifications: There are three new kids on the block that are being voted into the platform:
-
Jakarta Data 1.1 is heavily inspired by Spring Data JPA. It allows us to create repository interfaces that the container implements automatically at compile-time or runtime. No more manual
EntityManagerboilerplate code for basic CRUD! -
Jakarta Query 1.0 is a brand new specification that unifies how we write queries across Relational (JPA), NoSQL, and Data repositories. It’s the “one language to rule them all” for the EE ecosystem. It unifies JPQL (Persistence) and JDQL (Data) into a single, object-oriented query language.
-
Jakarta NoSQL 1.1 is finally bringing a standardised API for non-relational databases to the platform.
-
Comparison of Older APIs
If you’ve used Java EE before, stepping into the newest Jakarta EE world will feel like visiting an old hometown that’s been completely renovated. The street names are the same, but the buildings are different and everyone’s driving electric cars.
The following table shows the evolution and replacement of older APIs that you might have been familiar with:
| Java EE | Jakarta EE 12 |
|---|---|
| EJB | Mostly replaced by CDI (Contexts and Dependency Injection). |
| JSP | Effectively deprecated in favour of Jakarta Faces (JSF) or REST APIs. |
| Servlets | Now at v6.2, adding support for HTTP/3 and native Virtual Threads. |
| JPA | Now Jakarta Data, which feels almost identical to Spring Data. |
Further Reading and Signing Off
The full Jakarta EE 12 specifications are here. They are well worth viewing, even just to get an idea about the depth and breadth of the framework.
There is a Jakarta EE channel on YouTube at https://www.youtube.com/@JakartaEE/videos with over 700 videos. You can search for Jakarta EE 12, or any other topics.
Was this interesting? Please share your comments, and as always, stay safe and keep learning!