The Road to Jakarta EE Compatibility

Photo of Patrik Duditš by Patrik Duditš

Payara Platform 5.194 was released recently, and just like the previous release, it is a certified Jakarta EE implementation. The request for certification can be seen on Jakarta EE platform project issue tracker.

Filing this issue is the last step in getting the certification. Wondering what it takes to become Jakarta EE Compatible? Here's what it took for Payara Server to become compatible:

Jakarta EE Technology Compatibility Kit (TCK), also referred to as Compatibility Test Suite (CTS), is downloadable from the website of Jakarta EE Platform or can be built from source, given enough time and determination. The test suite is based on Java Test Harness - the tool used for running JDK tests, and a large number of deployment descriptors and Apache Ant files to drive the execution. So many, that there are actually 50% more XML files in TCK distribution than there are java files. In addition to this primary distribution, a compatible server needs also pass TCKs for Context and Dependency Injection and Bean Validation, that are distributed separately.

There are strict rules what you are permitted to change in the files that make up the TCK. Mostly only configuration file ts.jte and porting package. That is the code that facilitates the management of the server and deployment of test applications. We benefitted from our roots in Glassfish as its porting package was usable for Payara with only minor changes. Shell scripts that drive certification of Glassfish over at Eclipse Foundation were also very helpful.

In total, we ran 49850 TCK test cases. Each test case usually involves deployment to the application server or setting up application client container and CORBA connection to the server. And this takes time. The full test suite needs a little bit over 119 hours or 5 full days.

Here we were again able to learn from efforts of Eclipse Foundation members, including ourselves, towards running TCK suites in Jenkins. Just like them, we have split these almost 50,000 test cases by technology or by vehicle -- a term describing the technology in which the use of API is tested. For example, every JDBC test is invoked in the context of EJB, JSP page, Servlet, and Application Client container. We ended up with 77 parts that we run in parallel on 9 Linux virtual machines.

With that, we got our full test report in under 14 hours. When all tests passed, Jenkins gives us the test results summary back. If they didn't pass, we also get test logs and server logs for inspection and need to go fixing the server.

The test results summary is then published as part of our documentation and serves as proof on compatibility, which we request from the Jakarta Platform project via a GitHub issue, like the one we opened this article with.

Running Jakarta EE TCK has become a fixed part of our quarterly release process, as well as our monthly patch release process. It helps us ensure not only do we deliver new functionalities with each release, but also guaranteeing the same behavior for your existing applications.

Download the Jakarta EE Compatible Payara Server 5.194

 Payara Server  Download

We are looking into improving this test process further, shortening configuration phases of the partial jobs or even running parts of the suite on JDK 11. Due to classloading changes since Java 8, not all of the suites are capable of running on 11, and these results will help us shape future Jakarta EE releases, so they can become compatible with newer Java versions.

Want to Get Involved with the Future of Jakarta EE?

Learn more and get involved here:

Get Involved with Jakarta EE