Jump to content

Jakarta EE

From Alfawiki
Jakarta EE
Company typeSoftware platform
IndustryEnterprise software, Java platform
PredecessorJava Platform, Enterprise Edition (Java EE)
Headquarters
Jakarta
,
Indonesia
ProductsEnterprise 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.

Evolution of the Java enterprise platform
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

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

External links

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