Preamble: this post has been first posted on my blog company. Then it has been posted on the Java EE Guardians Blog. This made me very happy and I want to thank Reza Rahman and Manik Magar for their kindness and professionalism.
I have a dream: that one day the whole Java community would join forces to strengthen its position on server-side applications where movements such as containerization, microservices, cloud-native or serverless are challenging its paradigms.
As explained in my previous post, Java EE (Enterprise Edition) won’t go beyond version 8 and the future will take a different path under a new name and governance within the Eclipse Enterprise for Java (EE4J) project.
I am entering a dangerous territory on a subject which has often been very polemical but I will try to deal with it with as much objectivity as possible. At my own risk and peril…
Java EE and Spring: a complex relationship
In my impact assessment on the actors of the Java EE ecosystem, I have omitted to mention an indirect but very influential one: Pivotal and more precisely its famous Spring framework.
The relationship between Java EE and Spring has always been rich and complex in “best enemies” mode.
Spring was born in 2004, at the initiative of Rod Johnson, in response to the (real) complexity of J2EE (Java 2 Platform, Enterprise Edition) and in particular that of EJB 2 (Enterprise Java Beans). Since then, Spring and Java EE never stopped competiting and influencing each other:
- The arrival of Spring (and Hibernate) has caused a beneficial electroshock in the Java EE community which has given birth to EJB 3 and JPA 1, part of a much more approachable Java EE 5 released in 2006,
- Spring Batch directly influenced the Batch specification (JSR 352),
- Spring Dependency Injection inspired CDI (Context and Dependency Injection),
- Spring has always opportunely used the standards from J2EE and Java EE that were of interest to them such as Servlet, JMS and JPA,
- Still today, Spring 5 claims to be compatible with Java EE 8.
Since its creation, Spring has been able to please developers thanks to a pragmatic approach and a very good time-to-market allowing to quickly adopt technological innovations: NoSQL, AMQP, microservices, cloud-native applications…
Since 2006, Java EE has also prioritized simplicity and developer friendliness but with a slower time-to-market due to two main reasons:
- The length of time it takes for specifications to be developed within the JCP (Java Community Process): even with a ligth process, it takes more time to reach an agreement when involving a large number of stakeholders rather than when acting alone,
- Implementation and certification time: it often takes several months after a specification release to find supporting and certified Application Servers.
Recently, this gap has widened:
- Spring Boot has dramatically increased ease-of-use by pushing the convention over configuration principle to the maximum,
- Spring Cloud has helped address the new challenges related to Cloud-Native developments by leveraging Open Source components from Netflix ensuring service registry/discovery, resiliency, load-balancing, monitoring…
- Spring 5 has given to reactive programming the status of first class citizen.
On its side, Java EE has been (much) slower. After a good version 7 released in 2013, a blurry period has set in. In 2016, under the influence of the community, Oracle announced a new Java EE roadmap:
Java EE 8 was released in September 2017, an interesting and higly expected but not revolutionary version. More expectation was put on Java EE 9 in terms of innovation. Except that Java EE 9 will never exist!
In parallel, the Microprofile.io project was launched under the Eclipse Foundation in mid-2016 and gave a new momentum to the Java EE Ecosystem aiming at optimizing Enterprise Java for a microservices architecture. Microprofile 1.0 was based on three specifications representing the least amount of APIs required to build a microservice: JAX-RS 2.0, CDI 1.2 and JSON-P 1.0. MicroProfile 1.2 was released in September 2017 with additional features including Configuration, Fault Tolerance, JWT, Metrics and Health Check. It is expected that version 2.0 will align all APIs to Java EE 8.
Transitioning to EE4J
EE4J aims to offer a more collaborative and responsive way of working. However, the prerequisites for success are not negligible:
- Transfer of all Java EE 8 assets (for each specification: documentation, Reference Implementation and Test Compatibility Kit). This is an ongoing work as explained by David Delabassee,
- Implementation of a new governance model and operating system: both flexible and well-organized. A significant step has recently been achieved with the publication of the EE.next working group charter,
- Creation and active animation of a community,
- Product and package renaming: Oracle does not allow EE4J to reuse the “Java EE” trademark and the javax package (for new specifications). Another name must therefore be found. The final vote is open with two options: “Jakarta EE” or “Enterprise Profile”, Even if this renaming is not dramatic in itself, it will require an additional evangelization effort among developers and companies.
Once these elements are in place, EE4J will be able to evolve and adapt to the requirements of cloud-native applications and the changes of the Java SE platform, in particular Java Platform Module System, which will undoubtedly require a lot of substantial work.
An opportunity for reconciliation?
Beyond governance and technical aspects, EE4J will have to find legitimacy because its status as a standard will disappear outside the scope of the JCP. In this context, EE4J cannot afford the luxury of a fratricidal war against Spring. More broadly, I would say that the overall Java ecosystem cannot afford such luxury. Java’s hegemony for server applications is over and competition is fierce with valuable alternatives such as: Node.js, Go and Python. It would be good to join forces to give a new impetus to bring community and industry together.
Why not? If EE4J delivers a set of independent “à la carte” and compatible specifications,
Spring teams would be able to make specific contributions to those that interest them making then Spring framework a major actor for EE4J.
As developers and users of Java we all have an interest in it. I have a dream … Will it come true?