Jakarta EE overview

Jakarta EE, formerly known as Java EE, is an open source Java platform for building enterprise applications. Open Liberty implements Jakarta EE, which provides specifications for common services such as transaction management, security, and database access.

Jakarta EE specifies application programming interfaces (APIs) and a runtime environment to develop and run secure, scalable applications. An API is an interface that allows an application to use specific data or functions of an operating system or another application or service.

Jakarta EE also defines a container model to manage application components. Jakarta EE application servers, such as Open Liberty, host these containers and provide standardized system services that any application that is developed for Jakarta EE specifications can use. These open source specifications make applications more portable and resilient by providing configuration standards that can be applied across different products and environments. These standard specifications help developers focus on writing applications rather than managing low-level infrastructure details. Jakarta EE is widely used for enterprise applications in banking, e-commerce, travel, and more.

Java SE and Jakarta EE

Jakarta EE was formerly owned by the Oracle corporation and known as Java, Enterprise Edition (Java EE). Oracle moved Java EE to the open source Eclipse foundation in 2017, at which time its name was changed to Jakarta EE. Jakarta EE offers a community-driven open source model with more frequent releases than Java EE, enabling it to evolve more quickly to address the needs of modern applications.

Jakarta EE extends Java SE, which provides the core Java functions. Java SE provides the Java Runtime Environment (JRE), which is used to run Java applications; and the Java Software Development Kit (SDK), which is a collection of tools for developing Java applications. The JRE is primarily composed of the Java virtual machine (JVM) and the Java Class Library (JCL).

The JVM is a program that interprets Java application code. Like Jakarta EE, the JVM is a specification. Just as different implementations of the Jakarta EE specification are available, such as Open Liberty, different implementations of the JVM specification exist, such as OpenJ9 and HotSpot. Although each of these implementations derives from the same JVM specification, performance differences can occur among them. For example, Open Liberty has a better memory footprint and faster startup time on OpenJ9 than on HotSpot.

The JCL is a set of dynamically loadable libraries that the JVM can call at run time. These libraries enable Java applications to be operating-system independent by supplying many common functions that are provided by modern operating systems.

The following diagram shows the relationship between the Jakarta EE and Java SE platforms. The Java SE platform provides specifications for the Java SDK, the JRE, the JVM, and the JCLs. Jakarta EE extends Java SE by specifying a collection of APIs that are designed for enterprise application development. An Open Liberty server supports cloud-native applications by implementing the functions that these platforms specify.

diagram that shows the relationship between Jakarta EE components and Open Liberty
Jakarta EE Platform

Platform versions

Java SE evolved through a series of versions as more classes were added to the JCL, new APIs were introduced, and some older functions were deprecated and replaced. Currently, the only versions of Java SE that are maintained with long-term support (LTS) are Java SE 8, Java SE 11, and Java SE 17. In between LTS releases, Oracle introduces short-term support releases, such as Java 16. These short-term releases are supported for only 6 months. For more information about which versions of Java SE Open Liberty runs on, see Java SE support.

Java EE, which is now the open source Jakarta EE platform, has also evolved over a series of versions:

  • Java EE 8 was the last release of the platform by the Oracle corporation before it was moved to the Eclipse foundation, which first released the platform as Jakarta EE 8.

  • Jakarta EE 9 arrived in 2020. The primary change in this release was to replace javax with jakarta in Jakarta package names.

  • In February 2021, Jakarta EE 9.1 was released. Although this release did not include any API changes from version 9.0, it added support for Java SE 11.

  • In September 2022, Jakarta EE 10 was released. This release included many API changes and dropped support for Java SE 8.

Jakarta EE specifications

Ongoing development of Jakarta EE platform is advanced by the Jakarta developer community through the Jakarta EE Specification Process (JESP), which provides a blueprint to introduce new specification projects for the platform. Jakarta EE compatible runtimes, such as Open Liberty, implement the functions that specification projects describe. Each implementation is verified by the community through a Technology Compatibility Kit (TCK). A TCK is a battery of tests that checks the compliance of a reference implementation. For a specification project to become an official specification, it must be ratified through the process of developing at least one open source reference implementation that satisfies the TCK tests.

Open Liberty was a reference implementation of Jakarta EE 9.1, which means it implements all the required Jakarta EE specifications as defined by the Jakarta EE Platform Specification. Applications that run on Open Liberty can take advantage of Jakarta EE APIs by enabling the corresponding Open Liberty features in the server configuration. The following table describes several of the most commonly used Jakarta EE specifications and lists their corresponding Open Liberty features. The Try it out column provides links to Open Liberty guides that demonstrate how Open Liberty implements the specification.

Jakarta EE specifications
SpecificationFunctionOpen Liberty featureTry it out

Jakarta Context Dependency Injection

Enables Java object dependencies to be automatically injected at run time, and helps manage the lifecycle of those dependencies

Contexts and Dependency Injection

Injecting dependencies into microservices

Jakarta Persistence

Simplifies data persistence and object relational mapping for Java applications

Jakarta Persistence

Accessing and persisting data in microservices using JPA

Jakarta RESTful Web Services

Provides support for developing web services that comply with the Representational State Transfer (REST) architectural pattern

Jakarta RESTful Services

Creating a RESTful web service

Jakarta Security

Provides support for authentication, authorization, and other application security concerns

Application Security

Securing a web application

Jakarta JSON Binding

Provides a framework to convert Java objects to and from JSON documents

JavaScript Object Notation Binding

Consuming a RESTful web service

Jakarta Bean Validation

Defines a metadata model to validate EJB beans

Bean Validation

Validating constraints with microservices

Jakarta EE and Open Liberty

The Open Liberty team’s involvement with Jakarta EE goes back to the beginning of the project. The team is active across the Jakarta Working Group, sitting on committees such as the Specification Committee and the Steering Committee. Our developers are committers to numerous Jakarta EE specifications, including Jakarta Batch, Jakarta Connectors, Jakarta Concurrency, and Jakarta XML Web Services. They are also taking a leading role in the Jakarta EE Platform umbrella specification.

As new specification versions are introduced, Open Liberty implements them in new versions of its modular features. The Open Liberty zero migration architecture gives you the flexibility to continue to use the same version of an API or upgrade to newer versions according to the needs of your applications. New versions of Jakarta EE implementing features are regularly introduced in Open Liberty beta releases before they are included in a full general availability (GA) release.

Jakarta EE full platform, Web Profile, and Core Profile

The Jakarta EE specification defines the full platform Enterprise Edition. The Web Profile is a properly defined subset of the full platform. The Core Profile is introduced in Jakarta EE 10 and is a properly defined subset of the Web Profile.

Core Profile

The Core Profile is added in Jakarta EE 10 and includes the Jakarta EE features that are needed for modern cloud native applications. This subset of function includes all Jakarta EE functions that are required for MicroProfile-based applications.

Web Profile

The Web Profile defines a reasonably complete stack that targets modern web applications. This stack is a subset of the full platform standard APIs that can address the needs of most web applications.

Full platform

The full platform defines the full complement of the Jakarta EE programming model. In addition to the Web Profile features, the full platform has specifications for advanced business capabilities that an enterprise needs, such as for connectivity, enterprise beans, messaging, and application clients.

Consider these definitions when you install Open Liberty and its available features. Each installation option provides the Open Liberty kernel and features that support the full platform or Web Profile. Alternatively, you can install individual Jakarta EE features to your existing Open Liberty kernel installation.

Also, consider these definitions when you deploy applications to an Open Liberty server. If your application needs support for enterprise connectivity APIs, you must add full platform features to your installation or deploy the application to an Open Liberty installation that has full platform features.

To quickly add support for Jakarta EE, specify the Web Profile or Jakarta EE Platform convenience features in your server.xml file. A third convenience feature, Jakarta EE Application Client, is also available to quickly configure an application client component. For more information about convenience features, see Convenience features. A Core Profile convenience feature is not provided. You can enable all Core Profile function by adding the Jakarta RESTful Web Services and Jakarta JSON Binding features to your server.xml file.