社旗| 兴山| 榆林| 苏尼特左旗| 四子王旗| 噶尔| 河津| 卫辉| 成安| 德令哈| 墨江| 靖边| 代县| 彰化| 岚皋| 翁牛特旗| 凤庆| 淮阴| 讷河| 罗城| 石屏| 乌海| 瑞昌| 黄山区| 河津| 易门| 剑川| 长顺| 金山| 沂南| 丹徒| 共和| 温江| 叶县| 永泰| 翁源| 南沙岛| 社旗| 万荣| 金乡| 安岳| 上饶县| 平安| 丹巴| 乌兰| 察哈尔右翼前旗| 肥城| 芦山| 孝感| 本溪市| 平遥| 平利| 沂水| 永济| 台安| 吉木萨尔| 平房| 吉隆| 务川| 苗栗| 镇原| 德钦| 牟定| 武夷山| 洪雅| 惠东| 科尔沁右翼中旗| 沙雅| 万山| 仁怀| 临朐| 九江县| 黎平| 望谟| 凌海| 阳春| 高青| 台南市| 清远| 舒兰| 盐山| 庄浪| 萨嘎| 四平| 台安| 双阳| 谢通门| 华亭| 阜新市| 陈巴尔虎旗| 怀柔| 乌当| 鄂温克族自治旗| 离石| 塔城| 巴彦淖尔| 平谷| 荥经| 临泉| 临海| 靖边| 龙里| 会泽| 北海| 安多| 射阳| 吉隆| 无极| 贵定| 如皋| 涿州| 江津| 麻山| 寿光| 延寿| 张家口| 连南| 金溪| 得荣| 延安| 滦平| 龙南| 丹巴| 文县| 合水| 商南| 桂东| 江阴| 开鲁| 兴化| 应县| 从化| 嘉善| 大安| 永修| 唐海| 蓬溪| 广安| 曹县| 上饶县| 绵阳| 新沂| 平远| 猇亭| 阿勒泰| 太原| 肇东| 盐亭| 雁山| 旺苍| 上饶市| 阳信| 三明| 科尔沁左翼后旗| 唐海| 凌云| 博白| 单县| 大埔| 怀宁| 泾阳| 讷河| 安仁| 电白| 大石桥| 巩留| 秀山| 苏尼特右旗| 高唐| 陈仓| 平遥| 道县| 宿迁| 房山| 鄯善| 宕昌| 巨野| 桃园| 西峡| 颍上| 乌海| 万年| 前郭尔罗斯| 福海| 西平| 来安| 新竹县| 双阳| 宽甸| 滕州| 保山| 凉城| 琼结| 潼南| 乡城| 大洼| 大宁| 法库| 建始| 呼玛| 汾西| 池州| 巴里坤| 咸丰| 金昌| 泰安| 长春| 红岗| 屏南| 普定| 乌尔禾| 东胜| 阜新蒙古族自治县| 巴楚| 博白| 霸州| 八宿| 东明| 秀屿| 景县| 昂仁| 漠河| 肇庆| 恩施| 科尔沁左翼中旗| 青神| 万山| 达州| 城固| 池州| 承德县| 广元| 噶尔| 大通| 叙永| 平度| 高台| 乌鲁木齐| 台东| 陈巴尔虎旗| 湘潭县| 柳城| 天安门| 和林格尔| 独山子| 三亚| 连城| 望江| 米易| 怀集| 准格尔旗| 花垣| 新宁| 金寨| 永登| 吉木萨尔| 广宗| 宁国| 周口| 淮阴| 藤县| 新邵| 蒲城| 黄冈| 葡京网上娱乐
|
|
51CTO旗下网站
|
|
移动端
创建专栏

小白科普:Java EE vs J2EE vs Jakarta EE

听说过 Java EE 吗?那关于 Java 2 EE 、J2EE 或者现在的 Jakarta EE,你又是否有所耳闻呢?实际上,这些各异的术语描述的都是相同的东西:由 Java SE 扩展出的一系列企业规范。

作者:刘欣|2019-01-17 16:26

 1. 引言

听说过 Java EE 吗?那关于 Java 2 EE 、J2EE 或者现在的 Jakarta EE,你又是否有所耳闻呢?实际上,这些各异的术语描述的都是相同的东西:由 Java SE 扩展出的一系列企业规范。

在本篇短文中,我们将讲述 Java EE 的发展史。

2. 历史

在 Java 的第一个版本中,Java 企业扩展还只是核心 JDK 的一部分(译者注:核心 JDK 通常指 Java SE) 。然而到了 1999 年,Java 企业扩展已经被剥离出 Java SE,成为了 Java 2 的一部分,这也意味着 J2EE,或者说Java 2 平台企业版(Java 2 Platform Enterprise Edition)的诞生。J2EE 这个称呼一直维持到2006年。

2006 年发布的 Java 5,J2EE 被重命名为 Java EE,或者说 Java 平台企业版(Java Platform Enterprise Edition)。这次改名后的称呼一直延续到 了 2017 年的 9 月。那年发生了一件重大的事,Oracle 决定将 Java EE 捐赠给 Eclipse 基金会(但 Java仍然属于 Oracle)。

3. 转变原因

事实上,因为 Oracle 拥有 “Java” 商标权。按照法律要求,Eclipse 基金会需要对 Java EE 进行更名。

经过社区的投票选择,Java EE 被更名为 Jakarta EE。从某种意义上来说,Java EE 依然叫 JEE。(译者注: 将 Java EE 首字母缩写也可简称为 JEE)。

不过这仍然是个正在进行的故事,还未完全尘埃落定。

举个例子,虽然 Oracle 开源了 Java 源代码,但却并未开源所有的文档。关于这个问题,因为涉及到一些法律事宜,导致开源一些文档(例如与 JMS、EJB相关的)非常棘手,至今仍有许多争议。

现在还无法得知新的 Eclipse 基金会文档是否能够参考原文档。

同样令人奇怪的是 Eclipse 基金会不能使用 javax 的命名空间来创建新的 Java 包,但是可以在现有包的下面创建新的类和子类。

转变阶段也意味着对 Jakarta EE 添加规范的新流程。为了更好地理解这一点,让我们快速看一下 Oracle 添加规范的流程以及 Eclipse 基金会相应做出的改变。

4.未来

在过去,为了将一个特性添加进 “EE”(译者注:原文作者为了避免 Jakarta EE 历史名字的混杂性,使用“EE”来代指全部的版本,下同),我们需要 3 样东西 :规范、参考实现与测试。社区里的任何人都可以提交这 3 样东西,之后执行委员会将会决定何时将它们整合进 Java 语言中。

为了更好地理解添加规范的旧流程,让我们进一步了解 JSRs、Glassfish 和 TCK是什么 ,以及它们是如何整合新特性的。

我们也将一睹在未来可以预期的事。

4.1 JCP 以及现在的 EFSP

在过去,产生EE 新特性的流程被称为 JCP(Java Community Process)。

Java SE 现在仍然采用 JCP。但是由于 EE 的所有权已经从 Oracle 移交至 Eclipse 基金会,EE 已经有了新的流程,这个流程是Eclipse 开发流程(https://www.eclipse.org/projects/dev_process)的扩展,与 Java SE 的流程互不干扰,我们称之为 EFSP(Eclipse Foundation Specification Process)。

尽管 JCP 与 EFSP 之间有一些大的差异,但大都围绕着“透明、公开、集体负责和供应商中立”这几条准则展开。例如,EFSP 的组织者设想的合作工作团体是供应商中立的,认证流程是自助服务的,组织的运作与管理是精英化的。

4.2 JSRs

在 JCP 中,为 EE 添加新特性的第一步是创建一个 JSR(Java Specification Request)。JSR 有点类似于一个 EE 特性的接口。JCP 执行委员会会核准一个完整的 JSR,然后相应的 JSR 贡献者会编写代码,使其在社区内生效。

JSR-339 或者 JAX-RS 对于阐述上面的流程是一个好例子。JAX-RS 最初于 2011 年提出,在2012年被 JCP 批准,最终在 2013 年得以发布。

虽然在讨论规范时,社区可以随时加入进来,但时间表明,一个实现优先( implementation-first)的方式更利于创建能被广泛接受的特性与 API。所谓的实现优先,类似于JSR 310中的 java.time 和 Joda Time这个例子(译者注:JDK 1.8 之前 Java 关于时间的 API 很不如人意,使用广泛的是 Joda-Tme)。

因此,EFSP(Eclipse Foundation Specification Process)在其设定的目标中阐述了这个观点:“EFSP 将基于是否先进行了动手实验和编码,来判断其是否值得添加进规范中。

4.3 GlassFish

此外,JSR 作为 JCP 的一部分,需要一个参考实现。这有点类似于实现接口的类。对于那些想要创建自己的规范实现的群体,比如说兼容库的开发人员或者其他组织,参考实现都可以给予帮助。

对于 Java EE 特性,JCP 使用 Glassfish 作为参考实现。

虽然 Glassfish 的中心化简化了实现者的探索过程,但是这种中心化也要求更多的管理,并且倾向于偏袒某个供应商。

因此,EFSP 不要求参考实现,而只要求兼容的实现。简而言之,这种微妙的变化使得类似 Glassfish 之类的中心体系结构内的实现,不会被基金会无缘由地首选。

4.4 TCK

最后,JCP 要求 EE 特性需通过 TCK(Technology Compatibility Kit)的测试。

TCK 是一组验证特定 EE JSR 的测试。简而言之,为了遵循 Java EE,应用服务器需要实现所有 JSR, 并通过特定 TCK 上的所有测试。

与前述类似,Oracle虽然开源了TCK和EE jsr的源代码(译者注:但并没有开源相应的文档)。当然,未来所有的文档和 TCK 都将是开源的。

5. 总结

这些年来,Java EE 无疑前进了许多。很高兴看到它继续变化与变好。

前方之路充满坎坷,希望 Java 的转变能够平滑些。

作者 | Rodrigo Graciano

https://www.baeldung.com/java-enterprise-evolution

【本文为51CTO专栏作者“刘欣”的原创稿件,转载请通过作者微信公众号coderising获取授权】

戳这里,看该作者更多好文

【编辑推荐】

  1. 外媒速递:Java EE 8中的五大核心新功能早知道
  2. Java内存模型原理,你真的理解吗?
  3. 如何处理JavaScript 中的货币值?
  4. 一分钟理解Java包装类型
  5. 最难学的十大编程语言,Java只排第三,第一你绝对想不到!
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
白土乡 燕园街道 和什力克乡 石头围 北环铁路
椒江大酒店 双桥路 景洪 西城三里河 地铁古城家园社区
捕鱼达人下载 博彩评级 威尼斯人网址 mg电子游戏机价格 澳门葡京网址导航
百家乐代理 新濠天地博彩 百家乐游戏 威尼斯人平台 地下赌场游戏
拉斯维加斯线上赌博 乐天堂开户 澳门真人娱乐网址 威尼斯人网站 美高梅网址检测中心
大小点游戏博彩 明升注册 拉斯维加斯平台 澳门大发888网上娱乐 美高梅网站
老虎机定位器 澳门大富豪网址 现金三公注册网址 牛牛游戏下载 现金骰宝 年度十大电子游戏 大小点游戏 玩什么游戏可以挣钱 电子游戏厅 方法奇葩赌博网 巴黎人网站 pt电子游戏哪个最会爆 澳门巴黎人游戏 澳门龙虎斗注册 澳门大富豪网站 押大小排行 真钱打牌 明升网站 十三水技巧 电子游戏下载 二十一点平台 现金网游戏开户平台 澳门百老汇游戏官网 皇博压大小 真钱捕鱼 跑马机游戏 赌博技巧 巴比伦赌场官网 现金三公 地下网址 捕鱼游戏技巧 英皇网站 手机玩游戏赚钱平台 现金网排行 pt电子游戏注册 赌博技巧 电脑玩游戏赚钱平台 海立方游戏 ag电子游戏排行 希尔顿官网 太阳网上压大小 现金赌钱游戏 现金棋牌游戏 真人网站网址 地下开户 九五至尊娱乐网址 澳门梭哈游戏官网 奇葩袖赌博网 鸿胜国际压大小 博狗扑克游戏 德州扑克游戏规则 庄闲代理 奔驰宝马老虎机下载 现金三公开户注册 免费试玩电子游戏 GT压大小 新濠天地注册 现金老虎机网站 纸牌赌博种类 乐天堂开户 澳门永利平台 电脑版捕鱼达人 玩电子游戏入门 斗牛游戏 bbin压大小 网上电子游戏网址 澳门网络下注平台 明升国际网址 明升娱乐 捕鱼达人电子游戏 mg电子游戏试玩 二十一点游戏赌场 澳门万利赌场官网 大小对比网站 现金电子游戏 电子游戏实用技术 老虎机破解器 澳门梭哈官网 澳门百老汇赌场注册 千炮捕鱼兑换现金 网上合法赌场 PT电子游戏 波克棋牌官方下载 天天棋牌 凤凰棋牌 美少女战士电子游戏 什么游戏可以赚人民币 银河国际娱乐 澳门番摊官网 澳门梭哈官网 胜博发电子游戏 电子游戏打鱼机 澳门现金网 大三巴网站 PT电子游戏 澳门银河国际娱乐