What's New in Jakarta EE 10?
blog.payara.fish
blog.payara.fish
relevant: https://xkcd.com/1053/
It is no wonder that they couldn't come up with a better name [0]. For anyone else wondering, we came up with that name because it was the name of the conference room that we met in at the Sun campus to discuss creating Apache Jakarta, because Sun was upset we were originally using Apache Java. As a 'gift' of appreciation for making a halfway decent servlet engine at the time (Apache JServ), they also gave us Apache Ant and... Tomcat. The rest is history...
I've also been long out of the Java ecosystem, so that xkcd is especially relevant. Let's go shopping!
[0] https://twitter.com/codinghorror/status/506010907021828096 (this keeps coming up for me recently for some reason)
I did a few contributions to the codebase (I wrote the first class reloader implementation), but was super busy with many other codebases at that point that I had started/created... Turbine, Velocity, Multiple Commons projects, etc.
Happy to see acceleration of these API definitions. One thing I miss is having a "big picture" plan for all of EE APIs. It'd be really nice to have _Everything_ be defined as a CDI portable extension for instance.
But... the ecosystem is incredibly intimidating and there is no obvious starting point for a beginner. I know that with Clojure you can probably just stick to "Clojure stuff" like deps.edn, but that's also not really why people choose Clojure in the first place, nor does it seem like a sensible path to competency.
And I say this as a Python professional and a Common Lisp and Scheme hobbyist. My personal tolerance for chaotic and/or offbeat tooling ecosystems is high.
They've simplified it a ton lately. There's no real JRE vs JDK seperation any more. The Java Language / JVM versions are the same. Version 19 is just out and they release a version every 6 months now.
Any other languages like Clojure or Kotlin will have their own language versions and might specify a range of Java versions they work with.
You can think of Jakarta EE as just a version of some library that won't be relevant to you unless you use it. Like versions of react or angular or something.
I think maybe some of this perception comes from the days when Java EE (Enterprise Edition) was very common. I worked on Java apps for many years and was fortunate to mostly avoid projects centered on Java EE.
For getting started with current Java development, you can download OpenJDK AND IntelliJ IDE. Then Google search for a tutorial on what you want to build (a command line tool is a good place to start, then maybe a web app if you're familiar with that domain). Start with just the Java language and then add Kotlin, Clojure, etc later when you are more familiar with the ecosystem - these languages add incidental complexity that you'll want to avoid as a beginner. I'd recommend Gradle for building. You'll see Maven mentioned. Avoid the tool but understand that "Maven repo" and similar terms refer to artifact repositories for downloading 3rd party libraries.
Jakarta EE is the old Java EE’s continuation, which is a huge standard for solving many kinds of complex business requirements (dependency injection mostly, with aspect-oriented programming). In a way it is a Spring alternative, but the truth is that Spring also uses several annotation of the standard so it more like building on top a subset of it. While it is a difficult topic, it is an ecosystem in its own right, so I don’t think it is meaningful to discuss it with Java itself — one can make a whole career as a java dev without touching it.
Package management is basically either maven or gradle, but both use the same registry for the most part, so on the surface level they both are quite easy to use.
I would guess you mean java’s versioning (eg. 8, 17, etc) - this couldn’t be easier, it’s just an integer that increases every 6 months. That is, for OpenJDK. This is the JVM-implementation, being both the reference and the most often used one. It has several forks that you might have heard of, but they share more than they differ. Some of these forks/vendors provide LTS-releases and this usually targets 8, 11, 17, 11+6k versions. That’s pretty much it.
In the meanwhile you literally have to use a tool to generate a base repo to write anything more complex than hello world in the JS ecosystem :D
For us, it was good that Oracle stopped being invovled with Java EE. That allowed us to convince others in our team to move on to much simpler application development using core Java.
I had stopped paying attention to this Java EE/Jakarta EE area after the unnecessary drama that ensued in the community lead by an ex-Oracle employee.
I'm really surprised that Jakarta EE is still a thing.
Simple code turned into a complete dependency injection spagetti just beacuse CDI was a specification and advertised as the next best thing to come from the Java EE ecosystem.
I am really glad we moved away from that area.
Which would make the whole bloat thing moot and the whole EJB stack comically misused.
But look at it as an EJB providing an interface to the outside world. Forget about making almost every class an EJB. Then the 2 styles start to look quite similar, especially if 'the network is the computer'.
There were of course still plenty of bad design decisions. Every vendor has its own RMI variant, requiring drivers instead of a standardized http+json. 4 files for the interfacevis iver the top. The EJB database interface was bad.
Actually, in a way it is sort of sad how unfamiliar we are of the “previous generation’s” solutions. It’s not like load balancing, zero downtime, RPC and scaling are new things.
Something something java ?
They helpfully link to the jakarta.ee site which has an about page.
The most recent release of JEE has a new "Core" profile, which is stripped down to bare minimum for AoT-compilation and small memory footprint and implements CDI 4.0 Lite (based on Quarkus' "ARC" implementation)
Because of trademark issues with Oracle around the name Java, the open source community had to rename all its API jakarta instead of java which is completely stupid and is a demonstration that Oracle is just here to milk the name Java.
But what they did not do, is release the Java trademark. So, the whole kit had to be called something else (in this case they chose Jakarta, which has history in the Java community and lets the colloquial "JEE" still work).
Part of this process what they had to rename ALL of the Java EE packages from the original "javax" root name to something else, again, in this case, "jakarta".
This has been a several year process that's held up a lot of advancement in the platform as it transitioned out of Oracle and over the Eclipse foundation.
At this point with moving to Java 11 and supporting Java 17 (no small feat), and having all of the packages renamed, repackaged, re-released, Jakarata EE is probably "finally free" from where it was back in "Java EE 8".
Why?
Jakarta Concurrency (which is essentially portable access to container managed thread pools and other similar resources) was originally part of the full EE specification. Now they've moved it to the Web Profile so it can be used in those containers that do not support the entirety of Jakarta EE.