Jakarta EE
| Company type | Software platform |
|---|---|
| Industry | Enterprise software, Java platform |
| Predecessor | Java Platform, Enterprise Edition (Java EE) |
| Headquarters | Jakarta , Indonesia |
| Products | Enterprise Java specifications and APIs |
Jakarta EE, previously known as Java Platform, Enterprise Edition (Java EE) and before that as Java 2 Platform, Enterprise Edition (J2EE), represents a collection of specifications that enhance Java SE by adding enterprise-level capabilities such as distributed computing and web service support. Applications built on Jakarta EE operate on reference runtimes, which may include microservices or application server environments responsible for managing aspects like transactions, security, scalability, concurrency, and component deployment.
The framework of Jakarta EE is established through its specification, which defines the APIs and their interactions. Vendors are required to comply with these standards to market their offerings as Jakarta EE compliant. Common applications of this platform span domains such as e-commerce, accounting, and banking information systems.
History
The platform originated at Sun Microsystems under the name Java 2 Platform, Enterprise Edition (J2EE) starting with version 1.2, later rebranded to Java Platform, Enterprise Edition (Java EE) beginning with version 1.5.
Following Sun Microsystems’ acquisition by Oracle Corporation in 2009, Oracle continued overseeing Java EE through the Java Community Process. On September 12, 2017, Oracle declared the transition of Java EE stewardship to the Eclipse Foundation, where it was established as a top-level project called Eclipse Enterprise for Java (EE4J). Due to trademark constraints involving the terms and "Java," the platform was rebranded from Java EE to Jakarta EE. This new name refers to Indonesia’s capital city located on Java island and should not be mistaken for the previous Jakarta Project under the Apache Software Foundation.
| Version | Release Date | Specification | Supported Java SE | Major Updates |
|---|---|---|---|---|
| Jakarta EE 11 | Expected June/July 2024 | 11 | Java SE 21 | Improved data processing features |
| Jakarta EE 10 | 2022-09-22 | 10 | Java SE 17, Java SE 11 | Deprecated elements removed from Servlet, Faces, CDI, EJB; CDI Build Time enhancements |
| Jakarta EE 9.1 | 2021-05-25 | 9.1 | Java SE 11, Java SE 8 | Added support for JDK 11 |
| Jakarta EE 9 | 2020-12-08 | 9 | Java SE 8 | API namespace shifted from <syntaxhighlight lang="text" class="" style="" inline="1">javax</syntaxhighlight> to <syntaxhighlight lang="text" class="" style="" inline="1">jakarta</syntaxhighlight> |
| Jakarta EE 8 | 2019-09-10 | 8 | Java SE 8 | Complete compatibility with Java EE 8 |
| Java EE 8 | 2017-08-31 | JSR 366 | Java SE 8 | Introduction of HTTP/2 and CDI-based security model |
| Java EE 7 | 2013-05-28 | JSR 342 | Java SE 7 | Added support for WebSocket, JSON processing, and HTML5 |
| Java EE 6 | 2009-12-10 | JSR 316 | Java SE 6 | Introduced CDI managed Beans and RESTful services |
| Java EE 5 | 2006-05-11 | JSR 244 | Java SE 5 | Added annotations and generic programming support |
| J2EE 1.4 | 2003-11-11 | JSR 151 | J2SE 1.4 | WS-I compliant web services introduced |
| J2EE 1.3 | 2001-09-24 | JSR 58 | J2SE 1.3 | Launched Java Connector Architecture |
| J2EE 1.2 | 1999-12-17 | 1.2 | J2SE 1.2 | Initial platform specification release |
Specifications
Jakarta EE encompasses specifications for creating web pages, accessing transactional databases, and managing distributed messaging queues.
Its APIs build upon the core Java SE APIs by incorporating technologies such as Jakarta Enterprise Beans, connectors, servlets, Jakarta Server Pages, along with various web service frameworks.
Web specifications
- Jakarta Servlet: handles HTTP requests either synchronously or asynchronously; serves as a fundamental API for other Jakarta EE components.
- Jakarta WebSocket: provides APIs to support WebSocket communication.
- Jakarta Faces: a component-based framework for constructing user interfaces.
- Jakarta Expression Language (EL): a language employed within Jakarta Faces and Contexts and Dependency Injection to link components with beans throughout the platform.
Web service specifications
- Jakarta RESTful Web Services facilitates the development of web services adhering to the Representational State Transfer (REST) architectural style.
- Jakarta JSON Processing: enables handling of JSON-formatted data.
- Jakarta JSON Binding: transforms JSON data into Java objects and vice versa.
- Jakarta XML Binding: maps XML content to Java classes.
- Jakarta XML Web Services: supports the creation of SOAP-based web services.
Enterprise specifications
- Jakarta Activation (JAF): enhances component Beans by introducing data typing and binding capabilities.
- Jakarta Contexts and Dependency Injection (CDI): offers a container for dependency injection.
- Jakarta Enterprise Beans (EJB): lightweight APIs that support transactions (JTA), remote invocations (RMI, RMI-IIOP), concurrency management, dependency injection, and security for business logic components.
- Jakarta Persistence (JPA): provides object-relational mapping between relational databases and Java objects.
- Jakarta Transactions (JTA): defines interfaces and annotations to facilitate transaction management, often utilized transparently through higher-level EJB abstractions or CDI-managed beans.
- Jakarta Messaging (JMS): standardizes the creation, sending, reception, and processing of messages within enterprise messaging systems.
Other specifications
- Jakarta Validation: delivers annotations and interfaces for declarative validation via the Jakarta Validation API, enabling consistent constraints on beans (such as those in Jakarta Persistence) that are enforced across different layers. Both persistence and presentation layers adhere to these constraints in Jakarta EE.
- Jakarta Batch supports execution of batch processes designed for long-running background jobs that handle large datasets with scheduled intervals.
- Jakarta Connectors: a Java API connecting application servers with enterprise information systems (EIS), aimed primarily at vendors for enterprise application integration (EAI) rather than general developers.
Web profile
To streamline web container implementations, the Jakarta EE web profile defines a subset of specifications including:
| Specification | Java EE 6 | Java EE 7 | Java EE 8 Jakarta EE 8 |
Jakarta EE 9 Jakarta EE 9.1 |
Jakarta EE 10 |
|---|---|---|---|---|---|
| Jakarta Servlet | 3.0 | 3.1 | 4.0 | 5.0 | 6.0 |
| Jakarta Server Pages (JSP) | 2.2 | 2.3 | 2.3 | 3.0 | 3.1 |
| Jakarta Expression Language (EL) | 2.2 | 3.0 | 3.0 | 4.0 | 5.0 |
| Jakarta Debugging Support for Other Languages (JSR-45) | 1.0 | 1.0 | 1.0 | 2.0 | 2.0 |
| Jakarta Standard Tag Library (JSTL) | 1.2 | 1.2 | 1.2 | 2.0 | 3.0 |
| Jakarta Faces | 2.0 | 2.2 | 2.3 | 3.0 | 4.0 |
| Jakarta RESTful Web Services (JAX-RS) | 1.1 | 2.0 | 2.1 | 3.0 | 3.1 |
| Jakarta WebSocket (WebSocket) | — | 1.0 | 1.1 | 2.0 | 2.1 |
| Jakarta JSON Processing (JSON-P) | — | 1.0 | 1.1 | 2.0 | 2.1 |
| Jakarta JSON Binding (JSON-B) | — | — | 1.1 | 2.0 | 3.0 |
| Jakarta Annotations (CA) | 1.1 | 1.2 | 1.3 | 2.0 | 2.1 |
| Jakarta Enterprise Beans (EJB) | 3.1 Lite | 3.2 Lite | 3.2 Lite | 4.0 Lite | 4.0 Lite |
| Jakarta Transactions (JTA) | 1.1 | 1.2 | 1.2 | 2.0 | 2.0 |
| Jakarta Persistence (JPA) | 2.0 | 2.1 | 2.2 | 3.0 | 3..1 |
| Jakarta Bean Validation | 1..0 | 1..1 | 2..0 | 3..0 | 3..0 |
| Jakarta Managed Beans | 1..0 | 1..0 | 1..0 | 2..0 | — |
| Jakarta Interceptors | 1..1 | 1..2 | 1..2 | 2..0 | 2..1 |
| Jakarta Contexts and Dependency Injection (CDI) | 1..0 | 1..1 | 2..0 | 3..0 | 4..0 |
| Jakarta Dependency Injection | 1..0 | 1..0 | 1..0 | 2..0 | 2..0 |
| Jakarta Security | — | — | 1..0 | 2..0 | 3..0 |
| Jakarta Authentication | — | 1..0 | 1..1 | 2..0 | 3..0 |
| Jakarta Concurrency | — | — | — | — | 3..0 |
Certified Referencing Runtimes
Jakarta EE implementations deliver the essential Jakarta EE specifications and APIs, yet they differ in supplementary capabilities including connectors, clustering support, fault tolerance, high availability, security features, installation footprint, memory usage, and initialization speed.
Jakarta EE
| Runtime Reference | Provider | Jakarta EE 10 Platform Compliance | Jakarta EE 9/9.1 Platform Compatible Solutions | Jakarta EE 9/9.1 Web Profile Compatible Solutions | Jakarta EE 8 Platform Compatible Solutions | Jakarta EE 8 Web Profile Compatible Solutions | License Type |
|---|---|---|---|---|---|---|---|
| GlassFish | Eclipse | Yes 7.0.0 | Yes 6.0.0/6.1.0 | Yes 6.0.0/6.1.0 | Yes 5.1.0 | Yes 5.1.0 | Template:Free |
| Open Liberty | IBM | Yes 22.0.0.13-beta, 23.0.0.3 | Yes 21.0.0.12 | Yes 21.0.0.12 | Yes 19.0.0.6, 20.0.0.3 | Yes 19.0.0.6, 20.0.0.3 | Template:Free |
| WebSphere Liberty | IBM | Yes 23.0.0.3 | Yes 21.0.0.12 | Yes 21.0.0.12 | Yes 20.0.0.3 | Yes 20.0.0.3 | Template:Proprietary |
| WildFly | Red Hat | Yes 27.0.0.Alpha5 | Yes 23.0.1-Preview/25.0.0-Preview | Yes 23.0.1-Preview/25.0.0-Preview | Yes 18.0.0 | Yes 18.0.0 | Template:Free |
| JBoss EAP | Red Hat | Yes 8.0.0 | No | No | Yes 7.3.0 | Yes 7.3.0 | Template:Free |
| TomEE | Apache | Yes 10.x | Yes 9.x | Yes 9.x | Yes 8.x | Yes 8.x | Template:Free |
| Payara Server | Payara Services Limited | Yes 6.2022.1 Alpha 4 | Yes 6.2021.1 Alpha 1 | No | Yes 5.22.x, 5.23.x | Yes 5.23.x | Template:Free |
| Thunisoft Application Server | Beijing Thunisoft Information Technology | No | Yes 3.0 | No | Yes 2.8 | No | Template:Proprietary |
Java EE
Open Liberty IBM v18 .0 .0 .2 v18 .0 .0 .2 IBM WebSphere Application Server Community EditionIBM v3 .0 v2 .1 ... [table continues with additional vendors and servers in a similar compressed format] ...Code example
The following code snippet illustrates how various Java EE 7 components collaborate to create a web form intended for user editing.
Within Jakarta EE, web interfaces can be developed using Jakarta Servlet, Jakarta Server Pages (JSP), or Jakarta Faces (JSF) paired with Facelets. This demonstration employs Faces alongside Facelets. Input elements utilize the Jakarta EE Bean Validation API to apply validation rules.
<syntaxhighlight lang="xml"> <html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://xmlns.jcp.org/jsf/html" xmlns:f="http://xmlns.jcp.org/jsf/core">
<f:metadata>
<f:viewParam name="user_id" value="#{userEdit.user}" converter="#{userConvertor}" />
</f:metadata>
<h:body>
<h:messages />
<h:form>
<h:panelGrid columns="2">
<h:outputLabel for="firstName" value="First name" />
<h:inputText id="firstName" value="#{userEdit.user.firstName}" label="First name" />
<h:outputLabel for="lastName" value="Last name" />
<h:inputText id="lastName" value="#{userEdit.user.lastName}" label="Last name" />
<h:commandButton action="#{userEdit.saveUser}" value="Save" />
</h:panelGrid>
</h:form>
</h:body>
</html> </syntaxhighlight>
Backing Bean example
In Jakarta EE, "Backing Beans" facilitate the presentation layer logic. This sample combines Contexts and Dependency Injection (CDI) with Jakarta Enterprise Beans (EJB).
<syntaxhighlight lang="java"> @Named @ViewScoped public class UserEdit {
private User user;
@Inject private UserDAO userDAO;
public String saveUser() {
userDAO.save(this.user);
addFlashMessage("User " + this.user.getId() + " saved");
return "users.xhtml?faces-redirect=true"; }
public void setUser(User user) {
this.user = user;
}
public User getUser() {
return user;
}
} </syntaxhighlight>
Data Access Object example
Business logic in Jakarta EE is often implemented through Jakarta Enterprise Beans (EJB). Persistence can be managed using JDBC or Jakarta Persistence (JPA). The following example demonstrates EJB and JPA usage, with transactional behavior handled transparently by the JTA.
<syntaxhighlight lang="java"> @Stateless public class UserDAO {
@PersistenceContext private EntityManager entityManager;
public void save(User user) {
entityManager.persist(user);
}
public void update(User user) {
entityManager.merge(user);
}
public List<User> getAll() {
return entityManager.createNamedQuery("User.getAll", User.class)
.getResultList();
}
} </syntaxhighlight>
Entity class example
Entity or model classes are defined through Jakarta Persistence (JPA), while validation constraints are specified using the Bean Validation API. The sample below showcases both approaches.
<syntaxhighlight lang="java"> @Entity public class User {
@Id @GeneratedValue(strategy = IDENTITY) private Integer id;
@Size(min = 2, message="First name too short") private String firstName;
@Size(min = 2, message="Last name too short") private String lastName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
} </syntaxhighlight>
See also
- Canigó (framework)
- Deployment descriptor
- Java BluePrints
- Java Research License
- Sun Community Source License
- Sun Java System Portal Server
- Web container
- J2ME
External links
- The Official Jakarta EE Tutorial
- First Cup of Jakarta EE Tutorial: A Beginner’s Guide to Jakarta EE
- Jakarta EE Specification Guide - Platform
- Jakarta EE Official Starter: Create a Jakarta EE Project
- Java Platform, Enterprise Edition (Java EE), Oracle Technology Network
- Jakarta EE official YouTube channel
| Runtime Reference | Provider | Java EE 8 Certified – Full Profile | Java EE 8 Certified – Web Profile | Java EE 7 Certified – Full Profile | Java EE 7 Certified – Web Profile | Java EE 6 Certified – Full Profile Official Oracle Java EE Compatibility Page. |
Java EE 6 Certified – Web Profile | Java EE 5 Certified | J2EE 1.4 Certified | License Type |
|---|---|---|---|---|---|---|---|---|---|---|
| GlassFish Server Open Source Edition | Oracle | v5.0 | v5.0 | v4.x | v4.x | v3.x and later | v3.x Web Profile | v2.1.x | ||
| Oracle GlassFish Server | Oracle | v3 based on open source GlassFish server | Sun Java System Application Server v9.0 | Sun Java System Application Server v8.2 | ||||||
| Oracle WebLogic Server | Oracle | 14.1 .1 | 12 .2 .1 | v12c | v10 .3 .5 .0 | v9 | ||||
| WildFly | Red Hat | v14 .x | v14 .x | v8 .1 | v8 .0 .0 .Final | v7 .1 | v6 .0 and v7 .0 | v5 .1 | v4 .x | |
| JBoss Enterprise Application Platform | Red Hat | v7 .2 | v7 .0 | v7 .0 | v6 .0 | v5 | ||||
| IBM WebSphere Application Server | IBM | v9 .x | v9 .x | v8 | v7 | |||||
| IBM WebSphere Application Server Liberty | IBM | v18 .0 .0 .2 | v18 .0 .0 .2 | v8 .5 .5 .6 |