Implementation components used by Jakarta EE servers
Fast forward 6 years, and we have arrived at Jakarta EE 8 essentially (a re-licensing of Java EE 8). Most servers from the previous instalment have Jakarta EE 8 versions out. WebLogic has its Java EE 8 version officially out, with a Jakarta EE 8 version coming soon (there is no technical difference between these two really). TomEE has started to implement Java EE 8 and in its latest version has gotten quite far, but is not there yet. Resin remained at Java EE 6 with seemingly no plans to update these. JOnAS has disappeared off the face of the earth, and so has Geronimo as server (though as a provider of APIs and their implementations it has stayed alive).
Without further ado, here's the matrix of Java EE 8/Jakarta EE 8 implementation components used by Java EE/Jakarta EE servers:
Vendor | Red Hat | Eclipse | Oracle | Apache | IBM | TMax |
---|---|---|---|---|---|---|
AS | WildFly | GlassFish | WebLogic | TomEE+ | Open Liberty | JEUS |
Spec/Version | 19 | 5.1 | 14.1.1 | 8.0.1 | 20.0.0.4 | 8-b266 |
Servlet | Undertow Servlet 2.0.30 source |
Tomcat derivative & Grizzly | Nameless internal | Tomcat | WAS WebContainer (part of open liberty) 8.1 / 1.0.39.cl200420200401-1714 source |
JEUS Servlet (part of JEUS) 8.0.0.2 |
Enterprise Beans | Nameless internal | Nameless internal (EJB-container) | Nameless internal | OpenEJB | Nameless internal | Nameless internal |
Connectors | IronJacamar 1.4.20 | Nameless internal (Connectors-runtime) | Nameless internal | Geronimo Connector 3.1.4 source |
Nameless internal source |
Nameless internal |
Authentication |
Part of Elytron 1.11.2 source |
Jaspic provider framework (part of GlassFish) | Part of WebLogic Security | Part of Tomcat | Nameless internal source |
Nameless internal |
Transactions | Narayana source |
Nameless internal | Nameless internal | Geronimo Transaction 3.1.4 source |
Nameless internal | JEUS Transaction Manager (part of JEUS) 8.0.0.2 |
Messaging |
ActiveMQ Artemis 2.10.1 source |
OpenMQ 5.1.4 source |
WebLogic JMS |
ActiveMQ Classic 5.15.10 source |
Liberty messaging (part of open liberty)
1.0.39.cl200420200401-1714 source |
JEUS JMS (part of JEUS) 3.0.0 |
Concurrency | Concurrency RI 1.1.1 source |
Concurrency RI 1.1.1 source |
Nameless Internal (WebLogic concurrent) | Nameless Internal (part of OpenEJB-Core) source |
Nameless Internal source |
JEUS Concurrent (part of JEUS) 8.0.0.2 |
WebSocket |
Undertow WebSockets JSR 2.0.30 source |
Tyrus 1.15 source |
Tyrus 1.15 source |
Tomcat WebSocket (part of Tomcat) 9.0.30 source |
Liberty WebSocket (part of Open Liberty) 1.0.39.cl200420200401-1714 source |
JEUS WebSocket (part of JEUS) 8.0.0.2 |
CDI | Weld 3.1.3 source |
Weld 3.0.0 source |
Weld 3.1.0 source |
Open WebBeans 2.0.12 source |
Weld 3.1.1 source |
Weld 3.1.2 source |
Validation |
Hibernate Validator 6.0.18 source |
Hibernate Validator 6.0.10 source |
Hibernate Validator 6.0.16 source |
BVal 2.0.3 source |
Hibernate Validator 6.1.1 source |
Hibernate Validator 6.1.0 source |
REST | RESTEasy 3.11 source |
Jersey 2.28 source |
Jersey 2.29 source |
CXF 3.3.4 source |
RESTEasy (for EE 9) source |
Jersey 2.29.1 source |
CXF 3.3.3 (for EE 8) source |
||||||
Persistence | Hibernate 5.3.5.15 source |
Eclipselink 2.7.4 source |
Eclipselink 2.7.6 source |
OpenJPA 3.1.0 source |
Eclipselink 2.7.6 source |
Eclipselink 2.7.5 source |
Faces |
Mojarra 2.3.9.SP06 source |
Mojarra 2.3.9 source |
Mojarra 2.3.14 source |
MyFaces 2.3.6 source |
MyFaces 2.3.6 source |
Mojarra 2.3.9 source |
JSON Binding | Yasson 1.0.5 source |
Yasson 1.0.3 source |
Yasson 1.0.3 source |
Johnzon 1.1.13 source |
Yasson 1.0.6 source |
Yasson 1.0.6 source |
Expression Language | EL RI 3.0.3.jbossorg-2 source |
EL RI 3.0.2 source |
EL RI 3.0.2 source |
Jasper EL 9.0.30 (part of Tomcat) source |
Jasper EL 3.0.16(?) source |
EL RI 3.0.0 source |
Jakarta Mail Impl 1.6.4 source |
Jakarta Mail Impl 1.6.3 source |
Jakarta Mail Impl 1.6.2 source |
Geronimo JavaMail | Jakarta Mail Impl 1.6.2 source |
Jakarta Mail Impl 1.6.2 source |
|
Security | Soteria 1.0.1-jbossorg-1 source |
Soteria 1.0 source |
Soteria 1.0 source |
TomEE Security TomEE 9m7 |
Nameless Internal source |
Soteria 1.1-b01-SNAPSHOT (modified) source |
Batch | JBeret 1.3.5 source |
jbatch FRI 1.0.3 source |
jbatch FRI 1.0.3 source |
Geronimo BatchEE 0.5-incubating source |
jBatch FRI 1.0.16 (internal copy) source |
jbatch FRI 1.1-SNAPSHOT source |
Each color a component has reflects the vendor with that color in the header. Essentially there's four vendors creating separate and re-usable Jakarta EE components:
Red Hat |
Eclipse |
Apache |
IBM |
Oracle and TMaxSoft do create components that implement Jakarta EE APIs, but only use them within their own server products. Things are however not that clear cut. As can be seen in the previous instalment, all the components that are now Eclipse components were Oracle components before. This is because Oracle donated all of its reusable components to the Eclipse Foundation. Although IBM only directly produces one reusable component (jBatch FRI), it did not too long ago acquire Red Hat. This means all Red Hat components are essentially IBM components now, just as when the Sun components became Oracle components after Oracle acquired Sun.
If we look at the servers itself, we see that only TomEE exclusively uses components from a single vendor; its own vendor Apache. WildFly uses many components from its own vendor Red Hat, but uses components for Faces, JSON, Concurrency and Security among others from Eclipse. WildFly uses a single Apache component, namely ActiveMQ Artemis. This however used to be Red Hat's own component, HornetQ, which it donated to Apache in order to merge the existing ActiveMQ and HornetQ communities and together work on the next generation message broker.
GlassFish uses most components from Eclipse, its own vendor, two from Red Hat and one from IBM. This is however not randmom. As the former RI (reference implementation) of Java EE, it incorporated all the RI components. Since Red Hat was leading two specs, and IBM one, it used the components from those spec leaders. In Jakarta EE the concept of the RI has been done away with and has been replaced by compatible implementations, of which there always needs to be at least one. Since GlassFish is no longer an RI, its community could potentially develop Eclipse implementations of CDI, Validation and Batch. At least for the former a development that could lead to this is being considered by Payara.
Derivative servers were not included in the table, as they have the same components as the server they are derived from (albeit these components could be in different versions). This includes Payara and Cosminexus (Hitachi Application Server), and JBoss EAP. It's perhaps interesting to note that Payara and Hitachi are joint co-leaders of the GlassFish project and devote a significant amount of resources to further the upstream GlassFish project together with former owner Oracle.
Also excluded is our own Jakarta EE runtime, Piranha. This is because at the time of writing Piranha is far from ready. Via the OmniFaces project Piranha does introduce new reusable Jakarta EE components; for Jakarta Authentication and Jakarta Authorization, which until so far hadn't been produced by anyone (JOnAS however once did start development for a reusable Jakarta Authentication/JASPIC component).
Arjan Tijms
Nice and useful information about Java EE landscape.
ReplyDelete