Weld Meets Jakarta EE 9
Most of you surely know that Jakarta EE 9 is on the horizon; slowly but steadily it is making its way into Java world. And we are not far behind, in fact we have just released Weld 4.0.0.Alpha2 which is an implementation of CDI 3.0! You heard that right, in Jakarta EE 9, all APIs have bumped their major versions; CDI turned 3.0 and so Weld version implementing that became 4.0. Hand in hand with it goes Weld API 4.0.Alpha1, also adapted to EE 9.
Some basic information about the release:
All the bits should be available in Maven Central at this point.
There is also
.zipdistribution as usual, see download page for more information.
No WildFly patch is provided this time around because WildFly does not yet have an EE 9 branch.
Working and Broken Parts
The only, yet considerably huge, change in APIs is (or at least should be) the swap from
This comes with bunch of problems, for instance there is no EE server that could run on EE 9 with new packages yet.
GlassFish is going to be first and they are working on integrating all the EE 9 reference implementations.
There are some chicken-egg problems such as Weld requiring EE 9 server to execute CDI TCKs, but at the same time there is GlassFish needing Weld 4.0 to start operating with EE 9 in the first place.
For this reason, our first few 4.0 releases are going to be marked as
Beta, they will not be fully tested and might be missing some parts that previous releases contained.
Here’s what’s working:
All testing that doesn’t require full EE container
Weld core implementation and API works as usual and is fully released
Weld examples work only partially, all those needing EE container have nowhere to be deployed
Weld SE works fully
Weld Probe should work so long as you are in SE
And here are the missing parts:
We cannot execute CDI TCKs until there are stable GlassFish build
We should be able to renew this pretty soon
Other in-container tests that we have (running on WildFly) are now disabled
Servlet parts of Weld are completely excluded from early releases
This is because there is currently no servlet working on EE 9, therefore we have nothing to adapt our internals to, yet
One big and sadly unanswered question is that of backward compatibility.
In Jakarta itself, there seems to be a consensus of EE 9 not being backward compatible with EE 8.
Weld 4 on its own will not work with applications written for Java EE 8 - basically with anything requiring old
javax namespace packages.
However, EE servers will be forced to adapt somehow, so I expect a tooling might eventually emerge that will allow to run legacy applications on newer servers.
But that is yet to be seen and surely no sooner than after EE 9 release when other big servers start to adopt it.
Just to make things clear - we are planning on actively developing both, Weld 3 and Weld 4. We understand that EE server will need to take their time switching to Jakarta EE 9, all the more due to the aforementioned circumstances around backward compatibility. Therefore, both our versions will get their share of updates and bug fixes in the future!