What is the difference between a Java EE Web Profile certified server (like JOnAS) and a Java EE Full Platform certified server (like JBoss AS)?
Web profile is a subset of Java EE and it's purpose is to allow developers to create more lightweight applications which can be used inside simple servlet container (like Tomcat or Jetty).
“Java EE is under new management,” says Mike Milinkovich, executive director of the Eclipse Foundation. A bit of a quick history lesson, courtesy of Milinkovich: Oracle contributed Java EE to Eclipse in 2017, and it became an open source project. Subsequently, the name was changed to Jakarta EE.
Java Platform, Enterprise Edition (Java EE) is the standard in community-driven enterprise software. Java EE is developed using the Java Community Process, with contributions from industry experts, commercial and open source organizations, Java User Groups, and countless individuals.
That name would stick all the way to September 2017, when something major happened. See, in September 2017, Oracle decided to give away the rights for Java EE to the Eclipse Foundation (the language is still owned by Oracle).
Here is nice image which explains it. Web profile is a subset of Java EE and it's purpose is to allow developers to create more lightweight applications which can be used inside simple servlet container (like Tomcat or Jetty).
An app server compliant with Jakarta EE Platform profile implements over a dozen more specifications that does an app server compliant with Jakarta EE Web Profile.
In other words, a Web Profile compliant server offers a subset of the features offered by a Platform profile compliant server:
Platform profile = Web Profile + more stuff
In late 2017, Oracle gave responsibility for Java EE to the Eclipse Foundation. Future versions after Java EE 8 will be known as Eclipse Enterprise For Java (EE4J). Or Project EE4J. Or maybe EE.next. Or Jakarta EE. The branding has been changing.
In Java SE 11, some modules are dropped. The Java EE related parts are moving to a new home at the Jakarta EE project. Others such as CORBA have been offered for adoption by any interested organization. See JEP 320.
Jakarta EE 10 is being planned now (2021-09). After all the phases in the transition from Oracle Corp to Eclipse Foundation, the platform can now make progress with major improvements, new features, and pruning of undesirable features.
Version 10 is likely to involve some breaks in compatibility, in order to facilitate innovation. But nothing is yet written in stone. Get involved in the open process now if you have interests/concerns/suggestions/contributions.
Java SE 11 will become the minimum runtime supported by Jakarta EE compatible implementations.
For more info, see:
For an overview of proposed changes to the Platform Profile, see Define Jakarta EE Platform 10 #364.
Jakarta EE 10 may gain a new profile, Core Profile, besides the current Web Profile and (full) Platform Profile.
The Core Platform targets smaller runtimes suitable for microservices and ahead-of-time compilation. See GitHub page, Define Jakarta EE Core Profile 10 #387.
Ivar Grimstad has proposed changes to the Web Profile in Java EE 10 listed on Define Jakarta EE Web Profile 10 #363.
Jakarta EE 9.1 was released 2021-05.
See:
Version 9.1 makes Jakarta EE compatible with Java SE 11. This is the only significant change. Few API changes, nothing incompatible. Version 9.1 is functionally equivalent to Jakarta EE 9.
Jakarta EE Platform 9 was released 2020-12.
The focus is on removing the trademarked Java name from the various specifications. This includes moving to a new package name of jakarta.*
. In that one specific sense, this is a breaking release, as projects must be updated to the new package to run on EE 9 servers. After changing package name, existing apps will run well with few or no other changes.
To quote the Jakarta EE 9 Release Plan page:
The goal of the Jakarta EE 9 release is to deliver a set of specifications functionally similar to Jakarta EE 8 but in the new Jakarta EE 9 namespace
jakarta.*
.
In addition, the Jakarta EE 9 release removes specifications from Jakarta EE 8 that were old, optional, or deprecated in order to reduce the surface area of the APIs to ensure that it is easier for new vendors to enter the ecosystem – as well as reduce the burden on implementation, migration, and maintenance of these old APIs.
Predominantly, the project team sees Jakarta EE 9 as a tooling release…
Even though you will likely be able to expect upward compatibility in behavior, the naming changes means version 9 and later are not be a drop-in binary replacement. Not the end of the world. This may mean as little as you changing the import
package names in your various class files. Read this and this for details and links.
Jakarta EE Platform 8 is practically identical to Java EE 8.
As part of the transition from Oracle, the Eclipse team re-released Java EE 8 as Jakarta EE 8 using their new infrastructure for housing code and making builds. Same EE behavior, same internal naming and package structure. So the issues discussed below about Java EE Web Profile versus Java EE Full Platform still apply.
Jakarta EE 8 uses the javax.*
package naming, borrowed from Oracle Corp. Version 9 changes the package naming to jakarta.*
.
Java EE 8 was released 2017. See history of versions.
See JSR 366: Java Platform, Enterprise Edition 8 (Java EE 8) Specification for details.
Java EE is a superset of Java Standard Edition (Java SE). Any Java EE 8 implementation is also an implementation of Java SE 8 or later.
See a list of Java EE 8 technologies published by Oracle, with links to JSRs and specs.
The following technologies are required to be present in all Java EE profiles:
• Java SE version 8 (or later)
• Resource and component lifecycle annotations defined by the Common Annotations specification (Resource, Resources, PostConstruct, PreDestroy)
• JNDI “java:” naming context
• Java Transaction API (JTA)
The Web Profile is a specific subset of the full Java EE platform, focusing on commonly used elements. Implemented by products such as Apache TomEE or nearly so with Eclipse Jetty plus add-ons.
• Base level items required by all Java EE profiles ( listed above: Java SE 8, lifecycle annotations, JNDI
java:
context, and JTA )
• Servlet 4.0 (JSR 369)
• JavaServer Pages (JSP) 2.3
• Expression Language (EL) 3.0 (JSR 341)
• Debugging Support for Other Languages (JSR-45) 1.0
• Standard Tag Library for JavaServer Pages (JSTL) 1.2
• JavaServer Faces (JSF) 2.3 (JSR 372)
• Java API for RESTful Web Services (JAX-RS) 2.1
• Java API for WebSocket (WebSocket) 1.1 (JSR 356)
• Java API for JSON Processing (JSON-P) 1.1 (JSR 374)
• Java API for JSON Binding (JSON-B) 1.0 (JSR 367)
• Common Annotations for the Java Platform (JSR-250) 1.3 • Enterprise JavaBeans (EJB) 3.2 Lite
• Java Transaction API (JTA) 1.2
• Java Persistence API (JPA) 2.2
• Bean Validation 2.0 (JSR 380)
• Managed Beans 1.0
• Interceptors 1.2
• Contexts and Dependency Injection for the Java EE Platform 2.0
• Dependency Injection for Java 1.0
• Java EE Security API 1.0
• Java Authentication Service Provider Interface for Containers (JASPIC) 1.1
As a lighter alternative to using a Web Profile implementation, you could start with a Java Servlet/JSP implementation such as Apache Tomcat or Eclipse Jetty. While not official as a profile, this approach is very popular. Sometimes known as a web container.
IMHO, this should have long ago been formalized as a JavaEE / Jakarta EE profile. Given the huge popularity of Tomcat & Jetty, the need and benefit of a formal profile seems obvious to me.
When using this setup, you may selectively add independent libraries to benefit selectively from the various Java EE technologies. For example, for my own work building web apps using Vaadin Flow, I use Java SE with Tomcat. Sometimes I add a Bean Validation implementation library manually as that is all I need from the Java EE list of technologies.
A few of the Jakarta EE specifications have been re-engineered to work directly with Java SE based apps without a Jakarta EE server. And more such re-engineering is being planned. Implementations of such specs could be used with Tomcat or Jetty.
Of course, at some point rather than keeping adding more Jakarta EE oriented libraries to your Tomcat/Jetty project, it might make more sense to just switch to using a server compliant with one of the wider Jakarta EE profiles.
The following technologies are required:
• All the items in Web Profile
• EJB 3.2 (except for EJB entity beans and associated EJBQL, which have been made optional)
• JMS 2.0
• JavaMail 1.6
• Connector 1.7
• WebServices 1.4
• Concurrency Utilities 1.0
• Batch1.0
• Java EE Management 1.1
• JACC 1.5
• JSP Debugging 1.0
• Web Services Metadata 2.1
The following technologies are optional:
• EJB 3.2 and earlier entity beans and associated EJB QL
• JAX-RPC 1.1
• JAXR 1.0
• Java EE Deployment 1.2
Here is a diagram to show the nested groups of requirements.
The list above this diagram may be more accurate; this diagram has not been double-checked.
The Java EE 6 specification (JSR 316) contains the following lists:
The following technologies are required:
- EJB 3.1
- Servlet 3.0
- JSP 2.2
- EL 2.2
- JMS 1.1
- JTA 1.1
- JavaMail 1.4
- Connector 1.6
- Web Services 1.3
- JAX-RPC 1.1
- JAX-WS 2.2
- JAX-RS 1.1
- JAXB 2.2
- JAXR 1.0
- Java EE Management 1.1
- Java EE Deployment 1.2
- JACC 1.4
- JASPIC 1.0
- JSP Debugging 1.0
- JSTL 1.2
- Web Services Metadata 2.1
- JSF 2.0
- Common Annotations 1.1
- Java Persistence 2.0
- Bean Validation 1.0
- Managed Beans 1.0
- Contexts and Dependency Injection for Java EE 1.0
- Dependency Injection for Java 1.0
There are no optional technologies.
The following technologies are required components of the Web Profile:
- Servlet 3.0
- JavaServer Pages (JSP) 2.2
- Expression Language (EL) 2.2
- Debugging Support for Other Languages (JSR-45) 1.0
- Standard Tag Library for JavaServer Pages (JSTL) 1.2
- JavaServer Faces (JSF) 2.0
- Common Annotations for theJava Platform (JSR-250) 1.1
- Enterprise JavaBeans (EJB) 3.1 Lite
- Java Transaction API (JTA) 1.1
- Java Persistence API (JPA) 2.0
- Bean Validation 1.0
- Managed Beans 1.0
- Interceptors 1.1
- Contexts and Dependency Injection for the Java EE Platform 1.0
- Dependency Injection for Java 1.06
There are no optional components in the Web Profile.
For Java EE 7, there is a list of all EE technologies, also showing which are included in the Web Profile. Some technologies formerly available only in the Full Profile are now included in the Web Profile, such as JAX-RS.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With