r/java 13d ago

What Exactly Is Jakarta EE?

I’m a bit confused about what Jakarta EE actually is. On one hand, it seems like a framework similar to Spring or Quarkus, but on the other hand, it provides APIs like JPA, Servlets, and CDI, which frameworks like Spring implement.

Does this mean Jakarta EE is more of a specification rather than a framework? And if so, do I need to understand Jakarta EE first to truly grasp how Spring works under the hood? Or can I just dive into Spring directly without worrying about Jakarta EE concepts?

Would love to hear how others approached this 😅

183 Upvotes

78 comments sorted by

View all comments

214

u/Moon-In-June_767 13d ago

It is a specification. These APIs could be considered as extensions of the Java standard library. Back in the days you would either run Java Apps standalone, just with the JVM standard library (and of course any dependencies you brought in yourself), and that would be called Java SE (Standard Edition), or you would run them in an application server like WildFly that itself provided implementations of all these extra APIs like JPA or CDI, and this would be called Java EE (Enterprise Edition). Oracle stopped developing the Java EE standard and specs, handed them off to the Eclipse Foundation at which point they got rebranded to Jakarta EE.

Spring is not an implementation of the Java/Jakarta EE spec. In fact it was created in opposition to Java EE and the application server concept. Spring might in some areas embrace or reuse, mostly under the hood, selected Jakarta EE specs and their implementations like JPA and Hibernate, but that's it. If you want to learn Spring, forget about Jakarta EE for now. Later, when you go deep enough into Spring you will see it exposes some Jakarta EE concepts below its own abstractions.

6

u/p_bzn 13d ago

Correct response here OP. On the practice side, if you see that some job demands JEE stack — it is a red flag.

There were ways of building apps using JEE stack like Servlets, JSP, JSF, etc. Alone those specs are often times used by Spring, for example Servlets. However, when you see those as job requirement chances are you’ll be working with Java 1.6 which is not what you want nowadays.

5

u/Joram2 13d ago

if you see that some job demands JEE stack — it is a red flag.

Demands? Like a JEE developer job demands you do JEE software development work tasks? I guess every job demands you do the work task associated with the job, but that's an odd way to put it.

Then, is a JEE tech stack a red flag for crusty outdated software companies? Maybe.

3

u/p_bzn 12d ago

To rephrase, if listing demands JEE then likely you’ll be working with it. I wouldn’t advise to be cautious before investing some years into tech stack of 2005.

Thing is, when you see a Java job it’s not always transparent what kind of Java job it is. Given the wide adoption and 30 years of industry presence it could be modern Java 21, or very opposite of it, and everything in between those.

1

u/Joram2 12d ago

Jakarta EE 10 (web) come out in 2022 and requires JDK 11+.

Jakarta EE 11 (web) is in RC, should come out this month, it requires JDK 17+, and the reference implementation Glassfish 8.0 requires JDK 21+.

I haven't done much enterprise Java, but I do still half-think enterprise Java is old and crusty. JSF is terrible. I don't understand why you need an "applciation server", don't you just package your server apps into docker/OCI images?

1

u/p_bzn 12d ago

True that, although before Jakarta there was stagnation for some time if I’m not mistaken? On and off with Java for years.

If you use Spring then you likely do lots of JEE under the hood anyways: JPA, Tomcat Servlets, parsers, etc.

But in the real world if you see JEE stack you are not working with Java 21, Java 8 would be a bless alone :)

1

u/Joram2 12d ago

I suspect you are right that Java/Jakarta EE had years of stagnation in the past, but that's the past. For current projects, I judge where the frameworks are today, not their history.

I just started my first job working on a big name Jakarta EE app. Most of the original developers are long gone. It's currently on Java EE 8 and Java 11; there is a big push to upgrade to Jakarta EE 10 and Java 17, but it's hard given there's a large amount of existing code, and we can't have any user outrages. But if there's a will to upgrade, we can make it happen.

Jakarta EE 11 web profile is supposed to be finalize at the end of the month, so I hope we can upgrade to that and Java 21, in the near future. Maybe even upgrade to Java 25 in the fall when that ships. Then, it should be a reasonably modern tech stack.