1.1 Java EE发展简史
Java是很受欢迎的编程语言,而Java EE则是应用广泛的企业级架构。Java平台在经历了20多年的发展后,已然成为开发者首选的“利器”。大型互联网公司也多选择Java作为主力开发语言,这些企业包括Google、IBM、Oracle等外企,也包括华为、京东、百度、阿里巴巴等国内名企。Java以其稳定而著称,特别是“Write Once,Run Anywhere”(一次编写,各处运行)的特性,非常适合互联网企业对于快速推出产品、部署产品的需求。
1.1.1 Java平台发展简史
在2020年年初的TIOBE编程语言排行榜中,Java位居榜首。图1-1展示的是2020年3月TIOBE编程语言排行榜情况(https://www.tiobe.com/tiobe-index)。回顾历史,Java语言的排行也一直是名列三甲。
然而,作为当今企业级应用的首选编程语言,Java的发展并非一帆风顺。
1991年,Sun公司准备用一种新的语言来设计用于智能家电类(如机顶盒)的程序开发。“Java之父”James Gosling创造出了这种全新的语言,并命名为Oak(橡树),以他办公室外面的树来命名。然而,由于当时的机顶盒项目并没有竞标成功,因此Oak被阴差阳错地应用到万维网。
1994年,Sun公司的工程师编写了一个小型万维网浏览器WebRunner(后来改名为HotJava),该浏览器可以直接用来运行Java小程序(Java Applet)。
图1-1 TIOBE编程语言排行榜
1995年,Oak改名为Java。由于Java Applet可以实现一般网页所不能实现的效果,引来了业界对Java的热捧,因此当时很多操作系统都预装了Java虚拟机。
1997年4月2日,JavaOne会议召开,参与者逾1万人,创下了当时全球同类会议规模的纪录。
1998年12月8日,Java 2企业平台J2EE发布,标志着Sun公司正式进军企业级应用开发领域。
1999年6月,随着Java的快速发展,Sun公司将Java分为3个版本,即标准版(J2SE)、企业版(J2EE)和微型版(J2ME)。从这3个版本的划分可以看出,当时Java语言的目标是覆盖桌面应用、服务器端应用及移动端应用3个领域。
2004年9月30日,J2SE 1.5发布,成为Java语言发展史上的又一里程碑。为了凸显该版本的重要性,J2SE 1.5被更名为Java SE 5.0。
2005年6月,JavaOne大会召开,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,即J2EE被更名为Java EE,J2SE被更名为Java SE,J2ME被更名为Java ME。
2009年4月20日,Oracle公司以74亿美元收购了Sun公司,从此Java归属于Oracle公司。
2011年7月28日,Oracle公司发布Java 7正式版。该版本新增了(如try-with-resources语句、增强switch-case语句)支持字符串类型等特性。
2011年6月中旬,Oracle公司正式发布了Java EE 7。该版本的目标在于提高开发人员的生产力,满足苛刻的企业需求。
2014年3月19日,Oracle公司发布Java 8正式版。该版本中的Lambda表达式、Streams流式计算框架等广受开发者关注。
由于Java 9中计划开发的模板化项目(或称Jigsaw)存在比较大的技术难度,JCP执行委员会内部成员也无法达成共识,因此造成了该版本的发布一再延迟。Java 9及Java EE 8终于在2017年9月发布,Oracle公司宣布将Java EE 8移交给了开源组织Eclipse基金会。同时,Oracle公司承诺,后续Java的发布频率调整为每半年一次。截至目前,Java新版本为Java 15。图1-2所示为Java EE 8整体架构图。
图1-2 Java EE 8整体架构图
有关Java新平台的内容可以参阅笔者所著的《Java核心编程》。
1.1.2 Java EE现状
2018年2月26日,Eclipse基金会社区正式将Java EE更名为Jakarta EE,也就是说,后续的Java企业级发布版本将命名为Jakarta EE。这个名称来自Jakarta——一个早期的Apache开源项目,但该改名行为并未得到Java社区的支持。Java EE Guardians社区负责人Reza Rahman就Java EE重命名的问题做了一项Twitter调查,结果显示,68%的Java开发者认为应该保留Java EE名称。2019年9月10日,Jakarta EE 8终于发布,该版本旨在与Java EE 8规范完全兼容。在本书中,为了避免混淆,统一采用Java EE命名来代表J2EE、Jakarta EE或JEE。
1.EE4J的使命
EE4J(Eclipse Enterprise for Java)是一项开放源代码计划,旨在为Java运行时创建标准API、这些API的实现以及技术兼容性套件,以实现服务器端和云本地应用程序的开发、部署和管理。EE4J基于Java平台企业版(Java EE)标准,并使用Java EE 8作为创建新标准的基准。
EE4J允许使用灵活的流程、灵活的许可以及用于平台演进的开放治理流程。一个开放的过程不依赖于单个供应商或领导者,它鼓励参与和创新,并服务于整个社区的集体利益。
EE4J通过使用通用流程和通用兼容性要求定义一套集成的标准来建立其组成项目之间的通用性。EE4J通过提供Java EE 8和EE4J版本之间的兼容性为现有用户和新用户提供兼容性。
EE4J的成功取决于:
- Java EE 8技术快速过渡到EE4J项目。
- 灵活和开放的流程,用于发展EE4J标准API、这些API的实现以及技术兼容性套件。
- 一个由开发人员、供应商和最终用户组成的强大社区,支持并发展EE4J技术。
- 适应和发展EE4J技术,并提供可满足现有用户新需求及吸引新用户的创新。
- 满足EE4J实现以及Java EE 8和EE4J版本之间定义良好的兼容性标准。
- 使竞争的供应商和互补技术提供商能够提供可为EE4J技术增值的创新。
EE4J的会员来自世界顶尖的科技公司,其中包括CA、CEA、Fujitsu、Huawei、IBM、Konduit、OBEO、Oracle、Red Hat、Bosch、SAP等。
2.EE4J与Jakarta EE的关系
EE4J包含以下子项目:
- Eclipse Cargo Tracker
- Eclipse GlassFish
- Eclipse Grizzly
- Eclipse Implementation of JAXB
- Eclipse Jakarta EE TCK
- Eclipse Jersey
- Eclipse Krazo
- Eclipse Metro
- Eclipse Mojarra
- Eclipse OpenMQ
- Eclipse ORB
- Eclipse Soteria
- Eclipse Tyrus
- Eclipse Yasson
- EclipseLink Project
- Jakarta Activation
- Jakarta Annotations
- Jakarta Authentication
- Jakarta Authorization
- Jakarta Batch
- Jakarta Bean Validation
- Jakarta Concurrency
- Jakarta Connectors
- Jakarta Contexts and Dependency Injection
- Jakarta EE Examples
- Jakarta EE Platform
- Jakarta Enterprise Beans
- Jakarta Expression Language
- Jakarta Interceptors
- Jakarta JSON Binding
- Jakarta JSON Processing
- Jakarta Mail
- Jakarta Messaging
- Jakarta NoSQL
- Jakarta Persistence
- Jakarta RESTful Web Services
- Jakarta Security
- Jakarta Server Faces
- Jakarta Server Pages
- Jakarta Servlet
- Jakarta Stable APIs
- Jakarta Standard Tag Library
- Jakarta Transactions
- Jakarta WebSocket
- Jakarta XML Binding
- Jakarta XML Web Services
从上述列表可以看出,Jakarta EE是EE4J的一部分。Jakarta EE的目标是创建与Java EE兼容的API。而完整的EE4J除了Java EE API外,还包括很多实现了Java EE API的产品,比如GlassFish、Grizzly等。
由于EE4J是基于Java EE 8技术标准的,且与Java EE 8的API是完全兼容的,因此用户在从Java EE 8切换到EE4J项目时不会有难度。同时,EE4J由强大的供应商和强大的社区作为支撑,所提供的创新解决方案更能够满足现有用户的新需求,吸引新用户。
3.不再使用JCP
长期以来,Java EE规范的制定都是由JCP(Java Community Process)来执行的。JCP是一种针对Java技术开发标准技术规范的机制。它向所有人开放,任何人都可以参与审核,并提供Java规范请求(JSR)反馈。任何人都可以注册成为JCP成员,并加入JSR专家组,成员甚至可以提交自己的JSR提案。
2018年1月,Oracle公司表示将来不再支持或建议使用JCP来增强Java EE,而是建议并支持使用EE4J推动的过程对Java EE 8规范进行功能增强。在发给EE4J社区的邮件中,Oracle Web Logic Server产品管理高级主管Will Lyons传达了这则消息。
简而言之,未来Java EE的版本将由EE4J主导。
4.面向Cloud Native
2019年9月10日,Jakarta EE发布了第一个版本,即Jakarta EE 8。Jakarta EE 8与Java EE 8完全兼容,可以简单理解为将Java EE 8的API完全迁移到了Jakarta EE平台。
Jakarta EE发展的重点之一是创建Cloud Native(云原生)的Java应用。毕竟未来Java企业级应用都将会部署上云。
Jakarta EE包含以下子项目:
- Jakarta Annotations
- Jakarta Authentication
- Jakarta Authorization
- Jakarta Batch
- Jakarta Bean Validation
- Jakarta Concurrency
- Jakarta Connectors
- Jakarta Contexts and Dependency Injection
- Jakarta EE Platform
- Jakarta Enterprise Beans
- Jakarta Expression Language
- Jakarta Interceptors
- Jakarta JSON Binding
- Jakarta JSON Processing
- Jakarta Messaging
- Jakarta Persistence
- Jakarta Mail
- Jakarta RESTful Web Services
- Jakarta Security
- Jakarta Server Faces
- Jakarta Server Pages
- Jakarta Servlet
- Jakarta Stable APIs
- Jakarta Standard Tag Library
- Jakarta Transactions
- Jakarta WebSocket
- Jakarta XML Web Services
有关Cloud Native的内容可以参阅笔者所著的《Cloud Native分布式架构原理与实践》。