1. 简介
你可能听说过 Java EE,也可能听过 J2EE 或者现在最新的叫法 Jakarta EE。其实这些名称指的都是同一个东西:一组扩展自 Java SE 的企业级规范集合。
这篇文章我们就来聊聊 Java EE 是怎么一步步演变成 Jakarta EE 的。
2. 发展历史
在 Java 刚诞生的时候,企业级扩展功能其实是 JDK 核心的一部分。
到了 1999 年,随着 Java 2 平台的发布,这些扩展被从标准版中剥离出来,形成了一个独立的平台:J2EE(Java 2 Platform Enterprise Edition)。这个名字一直用到了 2006 年。
2006 年 Java 5 发布时,J2EE 被更名为 Java EE(Java Platform Enterprise Edition),并沿用了十多年,直到 2017 年 9 月——一件大事发生了。
✅ 2017 年 9 月,Oracle 决定将 Java EE 的权利转让给 Eclipse 基金会(Java 语言本身仍然归 Oracle 所有)。
3. 转型阶段
由于 Oracle 拥有 “Java” 这个品牌的所有权,所以 Eclipse 基金会必须为这个平台重新命名。
社区投票后选出了新名字:Jakarta EE。某种意义上来说,它依然是 JEE。
⚠️ 注:上图展示了 Java EE 到 Jakarta EE 的演进路线
当然,这个转型仍在进行中,尘埃尚未落定。
一些遗留问题
- ✅ Oracle 开源了代码,但并未开源所有文档,这引发了不少争议,特别是 JMS 和 EJB 等模块的相关文档。
- ❌ Eclipse 基金会不能使用
javax
包名创建新的 Java 包,但可以在已有包下创建新类和子类。 - ✅ Jakarta EE 的规范新增流程也发生了变化,我们后面会详细讲。
4. 展望未来
在以往的 Java EE 中,一个特性要想进入规范,需要满足三个要素:
- 规范(Specification)
- 参考实现(Reference Implementation)
- 测试套件(TCK)
这些可以由社区任何人提供,最终由执行委员会决定是否纳入。
接下来我们分别看看这些概念在 Oracle 和 Eclipse 基金会下的变化。
4.1. JCP 与 EFSP
过去,Java EE 新特性的诞生流程是由 JCP(Java Community Process) 驱动的。
现在,随着平台所有权的转移,Eclipse 基金会推出了自己的规范流程:EFSP(Eclipse Foundation Specification Process),它是 Eclipse Development Process 的扩展。
与 JCP 相比,EFSP 更强调以下几点:
- ✅ 透明性(Transparency)
- ✅ 开放性(Openness)
- ✅ 共担责任(Shared Burden)
- ✅ 厂商中立(Vendor Neutrality)
EFSP 提倡建立厂商中立的协作工作组、自助式的认证流程,以及基于贡献的治理结构。
4.2. JSR 的变化
在 JCP 体系中,新增一个特性首先要提交 JSR(Java Specification Request) —— 它相当于 EE 特性的“接口”。
例如 JSR-339(JAX-RS) 在 2011 年提出,2012 年通过,2013 年发布。
💡 实践证明,像 JSR 310(java.time) 和 Joda Time 这样“实现先行”的方式更容易被社区接受。
EFSP 也体现了这一点,它的目标是:
“EFSP 将以动手实验和编码为先,只有经过验证的功能才会被写入规范。”
4.3. Glassfish 的角色转变
在 JCP 中,每个 JSR 都需要一个参考实现(Reference Implementation),类似于“接口的实现类”。
Java EE 一直使用 Glassfish 作为参考实现平台。
但这种集中化方式容易造成厂商偏向性。因此,EFSP 不再强制要求参考实现,而是只需要一个兼容实现(Compatible Implementation)。
✅ 这一变化让平台更加公平,避免了对某个特定实现(如 Glassfish)的隐性偏好。
4.4. TCK 的延续
TCK(Technology Compatibility Kit)是一套用于验证 EE 特性是否符合规范的测试工具。
在 Oracle 时代,应用服务器必须实现所有 JSR 并通过 TCK 测试,才能称为“兼容 Java EE”。
好消息是:
✅ Oracle 已经开源了 TCK 和所有 EE JSR
✅ 未来的 TCK 和相关文档也将全部开源
5. 总结
Java EE 在这些年经历了巨大的变化,从 J2EE 到 Java EE 再到 Jakarta EE,平台正朝着更开放、更社区驱动的方向发展。
虽然转型过程中仍有不少挑战,但整体趋势是积极的。
希望 Jakarta EE 能够顺利落地,继续推动企业级 Java 的发展。