Jakarta EE 10 | Baeldung
Jakarta EE 10 | Baeldung
- 概览
在本教程中,我们将讨论Jakarta EE的最新发布。我们的目标是理解Jakarta的新变化以及这些变化如何影响Java平台。
到本教程结束时,我们希望您能够理解Jakarta的变化及其近期的未来。
- 什么是Jakarta EE
Jakarta EE是一个用于开发Java Web应用程序的开源框架,或者按照目前的表述,是云原生Java。 之前被称为Java EE(Java Enterprise Edition),由Oracle通过JCP(Java社区过程)开发和维护。然而,几年前,更确切地说是在2017年,Eclipse基金会接管了该项目。尽管如此,这两个组织无法达成一致,项目无法继续使用_javax.*和_java.*商标。这就是为什么现在项目被称为Jakarta的原因。
项目的主要理念始终是标准化并提供一套供应商中立的规范,以便Java应用程序能够轻松地从一个供应商实现移植到另一个供应商。 这将确保供应商之间的灵活性、可靠性、稳定性、互操作性和质量。
Jakarta EE现在使用JESP(Jakarta EE规范过程)。该过程保证所有规范包含以下内容:
- 规范和_JavaDocs_的文档。
- 为给定规范定义的API。
- TCK(技术兼容性工具包)和定义必须实现以确保规范合规性的测试的文档。
- 至少有一个实现遵循TCK。
- Jakarta EE发布
现在我们知道Jakarta EE是一个提供一套规范的框架,以便其他供应商可以以标准方式实现它们。让我们回顾一下这个项目的近期历史。
自从Eclipse基金会接手该项目以来,项目中没有引入任何新功能。在这段时间里,交付的唯一变化包括:
- 版本8:与Java版本8完全兼容。
- 版本9:破坏性发布,将命名空间更改为_jakarta.*而不是_javax.*。
- 版本9.1:支持Java 11。
正如人们可以想象的,对于开发人员来说,最近的几个版本并没有像它们可能的那样令人兴奋。然而,这给了他们时间来成熟其他讨论,比如像_MicroProfile_这样的轻量级应用程序和其他可能的未来规范。
现在我们已经清楚了Jakarta EE是什么以及我们是如何到达这里的。让我们讨论它最近的发布,Jakarta EE 10。
这些最后的发布专注于使Jakarta成为一个强大的框架,允许通过云原生Java应用程序进行创新。或者,用他们自己的话来说,“Jakarta EE 10现已推出,引入了构建现代化、简化和轻量级云原生Java应用程序的功能,为企业Java技术在开放、供应商中立、社区驱动的过程中的演变和创新提供了新的基线。”
正如所提到的,这个发布是自项目开发和协调控制变化以来最相关的。在新功能、内部变化、弃用和删除之间,有超过20个组件规范的变化。该发布现在针对Java 11,但也支持Java 17,当前的LTS版本。此外,平台现在支持JPMS:

在平台新增方面,两个重要新闻是名为CDI Lite 4.0的新组件规范和新的Jarkarta Core配置文件。接下来,让我们更深入地了解一些新增加和较小的变化。
4.1. 新组件
全新的CDI Lite 4.0组件规范专注于提供CDI规范中已有功能的较小子集。 它针对像Micronaut、Quarkus、Helidon等较短的运行时间,并还将支持使用GraalVM编译为本地代码。因此,许多动态特性必须在构建时工作,一些特性必须重写,例如扩展。由于目标是较小的运行时间,一些关键特性被移除。
继续朝着较小运行时间的方向发展,新的Core Profile规范旨在尝试标准化这样的MicroProfiles,以及上述框架。使用像Web Profile这样的规范子集,但不带一些用户关注规范,例如Faces。这个规范旨在通过减少学习曲线并使它们更便携,使微服务或较小应用程序的开发更加容易。
4.2. 组件更新
平台上的更新列表非常显著,但一些亮点包括:
- Web Profile 10:并发和资源管理现在成为这个规范的一部分
- Security 3.0:新的认证方法OpenId连接,标准化了这项技术在不同供应商之间的实现。一些较小的内部更新和一些较旧事物的弃用
- Persistency 3.1:增加了对_UUIDs_和_UUID_主键生成策略的支持,并再次标准化了供应商之间的使用
- Restful APIs 3.1:Multipart/form-data支持下载和上传。新的引导API可以在不需要应用程序服务器的情况下运行jar,并且_@Context_被弃用
- EJB 4.0:移除了实体bean,可嵌入_EJB_容器
- Faces 4.0:移除了对_JSP_支持、管理bean、资源解析器等的支持。新的类型安全Faces视图和_@ClientWindowScoped_
- CDI 4.0:发现模式现在默认为注释而不是全部。因此,如果beans.xml为空,将默认只发现注释的bean
- Servlets 6.0:之前标记为弃用的所有类和方法都被移除
- Batch 2.1:更好的CDI支持
除此之外,与并发相关的,还添加了新的注释来管理资源和控制任务的执行_@ManagedExecutionDefinition_和_@Asynchronous_。
4.2. 未来
尽管这个发布为平台带来了许多新功能和概念,但社区和项目论坛中仍在进行许多讨论。关于下一个版本,Jakarta 11的对话已经开始,未来承诺将带来更多创新。预期的新规范示例包括RPC、Data、Config和NoSQL。始终致力于现代化、简化和标准化平台中的这些技术。
- 如何迁移?
然而,要利用所有这些新功能和能力,我们需要升级版本并迁移到Jakarta 10。许多工具可以帮助我们迁移;尽管如此,如果我们决定走这条路,我们需要确保遵循一些步骤:
- 在POM/Gradle或首选构建工具中更新Jakarta版本
- 将导入从_javax.*更改为_jakarta.*
- 修复XML模式命名空间,如持久性XML等
- 重命名属性前缀。与包命名空间类似,属性前缀也发生了变化
- 重命名引导文件,同上
- 验证应用程序行为
通过遵循所有步骤,我们可以以较小到适度的努力迁移我们的应用程序。
- 结论
在本文中,我们研究了Jakarta EE 10的新发布,它为平台带来的演变,以及它的一些细微差别。此外,我们还查看了项目的未来和可能即将到来的规范。最后,我们了解了从任何低于9.0版本的版本迁移到最新发布版本的所有必要步骤。
希望现在我们对这个平台历史上的重要里程碑有了更多的了解,并决定是否考虑在我们的应用程序和未来项目中升级或使用它。