What is Jakarta EE
Jakarta EE is a set of standards for server-side Java applications: web pages, REST APIs, database access, transactions and security. It is not a single library but a platform: dozens of specifications designed to work together. You write code against the standard, and an application server runs it — a program that already contains implementations of all these standards.
A bit of history
| Year | Name | What happened |
|---|---|---|
| 1999 | J2EE 1.2 | Sun releases "enterprise" Java: servlets, JSP, EJB |
| 2006 | Java EE 5 | Annotations replace bulky XML files |
| 2017 | Java EE 8 | The last version run by Oracle |
| 2019 | Jakarta EE 8 | The platform moves to the Eclipse Foundation and gets a new name |
| 2020 | Jakarta EE 9 | The javax.* packages are renamed to jakarta.* |
| 2025 | Jakarta EE 11 | Requires Java 17+, supports records and Java 21 |
This course targets Jakarta EE 11, the current major version. If an old article has import javax.servlet..., it is about Java EE 8 or earlier: in new code the package is jakarta.servlet.
Specifications and implementations
A specification is a document plus a set of interfaces: what a technology must be able to do. An implementation is a concrete library that does what the document says.
| Specification | Purpose | Example implementation |
|---|---|---|
| Servlet | Handling HTTP requests | Tomcat, the Open Liberty engine |
| Jakarta REST (JAX-RS) | REST APIs | RESTEasy, Jersey |
| CDI | Dependency injection | Weld |
| Jakarta Persistence (JPA) | Working with a database through objects | EclipseLink, Hibernate |
| Jakarta Data | Repositories: queries without hand-written code | Open Liberty, Hibernate |
| Bean Validation | Data validation | Hibernate Validator |
| Jakarta Faces | Server-side HTML pages | MyFaces, Mojarra |
Your application depends only on the API — interfaces and annotations. The server provides the implementations, which is why a finished WAR file weighs only tens of kilobytes.
Application servers
| Server | Developed by |
|---|---|
| Open Liberty | IBM |
| WildFly | Red Hat |
| Payara | Payara Services |
| GlassFish | Eclipse Foundation |
This course uses Open Liberty 26.0.0.9: it starts from Maven with one command and downloads everything it needs. The application is compiled for Java 21 and was run on Java 25. The same code deploys to the other servers unchanged — that is the point of a standard.
Where Jakarta EE is used today
Banks, insurance companies and government systems use the platform — anywhere applications live for decades. Many modern frameworks are built on its specifications: Quarkus and Helidon use CDI and Jakarta REST, Spring Boot uses Servlet, JPA and Bean Validation. So knowing Jakarta EE pays off even if you never pick an application server.
What we will build
One example runs through the whole course — a blog: posts, comments, users. First we make pages with servlets, then a REST API, then we add CDI, a database, transactions, Jakarta Data repositories and security, and at the end we package the application for release.
Common mistake
Mixing old and new packages. A library written for Java EE 8 with javax.servlet or javax.persistence will not work on a Jakarta EE 11 server: the classes simply are not there, and the server reports something like java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet. Check that your dependencies support the jakarta.* namespace.