The Eclipse Foundation has released version 8.0.0 of Eclipse GlassFish, the lightweight open-source application server that, for many years, has served as a reference implementation and compatible implementation of JavaEE/Jakarta EE.
Along with bug fixes and dependency upgrades, new features in this release include: support for virtual threads; enhanced application security; and improved data access.
After 15 milestone releases, led by the team at OmniFish, GlassFish 8.0.0 requires JDK 21 as a minimal version, with support for JDK 25, and is a compatible implementation of Jakarta EE 11.
Support for virtual threads includes: managed executors from the Jakarta Concurrency 3.1 specification; and the virtual thread pool from GlassFish Grizzly 5.0 for HTTP and IIOP requests. This allows GlassFish to handle many concurrent requests with minimal overhead.
GlassFish supports the Jakarta Data 1.0 specification with an initial integration of Eclipse JNoSQL, the compatible implementation of the Jakarta NoSQL specification. The repository pattern defined in Jakarta Data provides an improved developer experience with features such as: reduced boilerplate; the ability to organize repositories based on domain models and use cases; and support for both offset-based and cursor-based pagination.
GlassFish provides enhanced security with integration of the MicroProfile JWT Authentication 2.1 and Jakarta Security 4.0 specifications. This allows developers to: inject a JWT-based authentication mechanism combined with secure REST endpoints and user interface pages.
Led by the team at OmniFish since its creation in April 2022 with David Matějček as Project Lead, OmniFish provides direct support for all GlassFish releases to ensure correctness of all administrative tasks and that GlassFish is thoroughly tested. OmniFish co-founders Arjan Tijms, Ondro Mihályi and Matějček, along with web engineer Bauke Scholtz, have many years of experience with GlassFish, Jakarta EE, Java application development and Java middleware production support.
When asked about the highlights and challenges about the OmniFish journey of 15 milestone releases and the final delivery of GlassFish 8.0.0, Mihályi told InfoQ:
Every new major release is a challenge in planning, execution, and keeping all things aligned. GlassFish is not a single monolithic project, it’s composed of many internal and external modules. Everything needed to be synchronized and all modules released as a final version for the final GlassFish 8 version. At the same time, there was pressure from the Jakarta EE TCK team to provide them early milestones they can run the test suites against. And then, suddenly, Jakarta EE decided to also support Java 17 despite the initial plan to support Java 21 only. To be released, Jakarta EE 11 requires at least one certified server, and GlassFish was realistically the only server to be certified by that time. And so we had to provide a version for Java 17 too. This all put a lot of pressure on the GlassFish team and on OmniFish, who stand behind GlassFish and contribute most of the work on it.
A highlight of GlassFish 8.0 is the unique support of the new Jakarta Data specification, where GlassFish supports both NoSQL and Persistence (JPA) repositories. We joined forces with the Eclipse JNoSQL project, which had a reusable Data implementation for NoSQL databases. OmniFish added support for SQL databases to JNoSQL. Both projects benefited – GlassFish got support for Data repositories over both NoSQL and JPA entities, and JNoSQL got support for a reusable JPA backend.
Another highlight is the support for virtual threads. This effort has a long history. Soon after Java 21 was released, OmniFish built an extension for GlassFish which runs HTTP requests in virtual threads. Though, it was a challenge to add that to the GlassFish project officially, because the Grizzly module was not ready to include code that requires Java 21. In the end, we managed to add it in Grizzly 5 and GlassFish 8, which require Java 21. To get support for virtual threads in managed executors, we closely collaborated with Payara on the GlassFish Concurro component, which is used also in their server.
There are many more things worth mentioning though they are less visible. We were working on enhancing GlassFish 7 concurrently with bringing GlassFish 8 to life. We introduced a lot of structural and performance enhancements, including initial JPMS modularization in GlassFish 7.1, which we then merged into GlassFish 8. All in all, GlassFish 8 is not only about a new Jakarta EE version, but also brings MicroProfile Health, support for the latest Java version, some new GlassFish-specific features, and production quality guaranteed by its comprehensive test suite and by the OmniFish team that maintains it.
GlassFish has a rich history going back 30 years. It was first introduced as the Kiva Enterprise Server in January 1996, the same month as the release of JDK 1.0. Along the way, it had made its way through a number of companies and name changes that include: Netscape Application Server (NAS) when Netscape purchased Kiva in 1997; iPlanet when Sun and Netscape formed an alliance in 1999; the Sun ONE Application Server (S1AS or SOAS) with the release of version 7 in 2002; the Sun Java System Application Server (SJSAS) with the release of version 8 in 2004; and finally as a new open-source project named GlassFish in 2005 with the source code donated from SJSAS. GlassFish 1.0 was a compatible implementation of Java EE 5 in 2006.
More details on this release may be found in the release notes.
