Eclipse基金会已经发布了GlassFish 8.0.0版本。这款轻量级的开源应用服务器多年来一直被视为JavaEE/Jakarta EE标准的参考实现方案及兼容实现版本。
此次更新不仅包含错误修复和依赖项升级,还新增了多项功能:支持虚拟线程技术、提升了应用程序的安全性,并优化了数据访问性能。
在OmniFish团队的带领下,经过15次阶段性发布后,GlassFish 8.0.0现在最低要求使用JDK 21作为运行环境,同时也支持JDK 25;此外,它还是Jakarta EE 11标准的兼容实现版本。
虚拟线程功能的实现包括:基于Jakarta Concurrency 3.1规范的执行器管理机制,以及GlassFish Grizzly 5.0版本中为HTTP和IIOP请求提供的虚拟线程池。这些技术使得GlassFish能够在几乎不增加开销的情况下处理大量并发请求。
GlassFish还支持Jakarta Data 1.0规范,其中首次整合了Eclipse JNoSQL——这款符合Jakarta NoSQL标准的实现工具。Jakarta Data中定义的仓库模式为开发者带来了诸多便利,比如减少了代码冗余、允许根据领域模型和用例来组织数据结构,同时还支持基于偏移量和游标的分页功能。
通过集成MicroProfile JWT Authentication 2.1和Jakarta Security 4.0规范,GlassFish的安全性得到了显著提升。开发者可以利用这些技术将基于JWT的身份验证机制与安全的REST接口及用户界面相结合起来。
自2022年4月成立以来,在David Matějček的带领下,OmniFish为所有GlassFish版本提供了直接的技术支持,确保各项管理操作的准确性,并对GlassFish进行了全面测试。OmniFish的联合创始人Arjan Tijms、Ondro Mihályi以及David Matějček,再加上网页工程师Bauke Scholtz
每一次新的重大版本发布,在规划、执行以及确保所有环节协调一致方面都面临着诸多挑战。GlassFish并不是一个单一的、整体结构固定的项目,它由许多内部和外部模块组成。为了最终推出GlassFish 8的正式版本,所有相关模块都必须进行同步处理,并且要一同发布。与此同时,Jakarta EE TCK团队也施加了压力,要求我们尽早提供可供他们用来运行测试套件的阶段性成果。后来,Jakarta EE突然决定也开始支持Java 17,而最初的计划其实是只支持Java 21的。要想发布Jakarta EE 11,至少需要有一款经过认证的服务器,而在当时,实际上只有GlassFish符合这一要求。因此,我们也不得不为Java 17版本提供相应的支持。所有这些因素都给GlassFish团队以及为该项目付出大量努力的OmniFish带来了巨大的压力。
GlassFish 8.0的一个显著特点是它对新的Jakarta Data规范提供了独特的支持,使得GlassFish能够同时支持NoSQL数据库和JPA持久化存储机制。我们与Eclipse JNoSQL项目进行了合作,后者为NoSQL数据库提供了一套可重用的数据访问实现方案。OmniFish则将SQL数据库的支持功能添加到了JNoSQL中,这两个项目因此都受益匪浅——GlassFish获得了对NoSQL数据库和JPA实体数据的统一支持,而JNoSQL则得到了一个可重用的JPA后端框架。
另一个值得关注的亮点是GlassFish对虚拟线程的支持。这项功能的开发历程其实很漫长。在Java 21发布后不久,OmniFish为GlassFish开发了一个扩展模块,使得HTTP请求可以在虚拟线程中执行。不过,要将这一功能正式纳入GlassFish项目本身并非易事,因为Grizzly模块当时还不适合包含需要Java 21支持的代码。最终,我们还是在Grizzly 5和GlassFish 8版本中实现了这一功能,这两个版本确实需要使用Java 21才能运行。为了在管理执行器中支持虚拟线程,我们还与Payara密切合作,共同开发了GlassFish Concurro组件,该组件也被Payara他们的服务器所采用。
还有很多其他值得提及的地方,只不过它们没有那么显眼罢了。我们在致力于推出GlassFish 8的同时,也在持续改进GlassFish 7。我们为GlassFish 7.1引入了许多结构上的优化和性能提升措施,后来这些改进也被合并到了GlassFish 8中。总的来说,GlassFish 8不仅仅是一个新的Jakarta EE版本,它还带来了MicroProfile健康检查功能、对最新Java版本的支持、一些专为GlassFish设计的新特性,而且其全面测试套件以及负责维护它的OmniFish团队也为该产品的稳定性提供了保障。
GlassFish拥有长达30年的发展历史。它最初是在1996年1月作为Kiva Enterprise Server被推出的,而就在同一个月,JDK 1.0也正式发布了。在之后的发展过程中,它历经了多次名称变更和所有者更迭:1997年Netscape收购Kiva后,它被称为Netscape Application Server;1999年Sun与Netscape结成联盟后,它变成了iPlanet;2002年第7版发布时,它被命名为Sun ONE Application Server(S1AS或SOAS);2004年第8版发布时,它又变成了Sun Java System Application Server(SJSAS);最终在2005年,随着SJSAS的源代码被捐赠出来,它才作为一个新的开源项目——GlassFish正式诞生。2006年发布的GlassFish 1.0版本,是符合Java EE 5规范的实现版本。
有关此次发布的更多详细信息,请参阅发布说明。
