Java EE:更名實(shí)屬無(wú)奈,未來(lái)路在何方?

Java EE 的現(xiàn)狀是怎樣的?

對(duì)于大多數(shù)企業(yè)來(lái)說(shuō),Java EE 仍然是一個(gè)非常有價(jià)值的平臺(tái):

完善而靈活的編程模型。

單一的依賴管理:通常一個(gè) Maven 的 pom.xml 不會(huì)包含超過(guò) 20 行配置代碼,即使項(xiàng)目很復(fù)雜。

CDI 易用且強(qiáng)大。

可以與大多數(shù) IDE 集成。

有很多輕量級(jí)的應(yīng)用服務(wù)器,比如 TomEE、Payara、Red Hat Wildfly 和 IBM Liberty,它們不僅啟動(dòng)速度快,而且占用資源小。

可以使用 Java EE 來(lái)開(kāi)發(fā)容器化的微服務(wù),雖然不完美,但也不失為一種選擇。

在我看來(lái),Java EE 的不足在于:

不夠先進(jìn):盡管它還有一定的價(jià)值,但大部分開(kāi)發(fā)者并不會(huì)將它作為開(kāi)發(fā)云原生應(yīng)用的首選。

因?yàn)榻M件模型的差異,缺乏整體的一致性:Servlet、CDI、EJB……確切點(diǎn)說(shuō),CDI 和 EJB 之間的界限有點(diǎn)模糊,或許 CDI 在未來(lái)會(huì)成為“第一類公民”。

測(cè)試相對(duì)復(fù)雜。

規(guī)范及其實(shí)現(xiàn)的演進(jìn)速度較慢。

與 Java SE 不同步:要想在 Java EE 中看到 Java 9 的模塊化系統(tǒng)尚需時(shí)日。

Java EE 生態(tài)系統(tǒng)的演化

Oracle 的決定給整個(gè) Java EE 生態(tài)系統(tǒng)帶來(lái)重大影響。

Oracle

作為 Java 技術(shù)(包括 Java EE)和品牌的所有者,Oracle 仍然會(huì)繼續(xù)負(fù)責(zé)維護(hù) Java EE 8。

但這種所有權(quán)在品牌和未來(lái)的技術(shù)發(fā)展方面存在一些限制,比如:

不能再使用 Java EE 作為品牌名稱。

在新名稱中使用 Java 要經(jīng)過(guò)多方討論和允許。

不能再使用 javax 包名。

JCP

JCP 旨在“為 Java 技術(shù)制定標(biāo)準(zhǔn)技術(shù)規(guī)范”。但 JCP 幾乎為 Oracle 所掌控:項(xiàng)目管理辦公室、選舉、投票、規(guī)范管理等等。從組織角度來(lái)看,JCP 是開(kāi)放的,它歡迎任何人加入,IBM 和 Red Hat 就是非常重要的成員。同時(shí),JCP 涵蓋了 Java EE 中的很多規(guī)范,如 Servlet、EJB、CDI、JAX-RS……

其中每個(gè)規(guī)范都是以 JSR(Java Specification Request)的形式進(jìn)行管理的(比如 Java EE 8 對(duì)應(yīng) JSR 266,Servlet 4.0 對(duì)應(yīng) JSR 369,CDI 2.0 對(duì)應(yīng) JSR 365,CDI 2.1 對(duì)應(yīng) JSR 370),并由專家組負(fù)責(zé)管理每個(gè)規(guī)范的生命周期。

專家組要交付三個(gè)方面的內(nèi)容,包括規(guī)范文檔、規(guī)范的參考實(shí)現(xiàn)以及測(cè)試套件。

從外部來(lái)看,這個(gè)流程太過(guò)笨重:從規(guī)范的啟動(dòng)到最終發(fā)布需要很長(zhǎng)時(shí)間,而應(yīng)用服務(wù)器實(shí)現(xiàn)規(guī)范也需要一些時(shí)間。

從內(nèi)部來(lái)看,作為 JCP 的成員,我不得不承認(rèn),JCP 的監(jiān)管質(zhì)量和人們的投入程度給我留下了深刻印象?;蛟S它的步子邁得不夠快,但話說(shuō)回來(lái),在制定一個(gè)標(biāo)準(zhǔn)時(shí),創(chuàng)新又占有多大比重呢?

EE4J 最為成功的一個(gè)方面在于它的敏捷性,它能夠很快建立起強(qiáng)壯且靈活的監(jiān)管模型。

Java EE Guardians

Java EE Guardians 由“一群致力于通過(guò)社區(qū)和擁護(hù)者來(lái)推動(dòng) Java EE 平臺(tái)發(fā)展的草根組成”。Reza Rahman 在 2015 年成立了 Java EE Guardians,旨在催促 Oracle 重啟 Java EE 8,因?yàn)楫?dāng)時(shí)的 Java EE 8 處于停滯狀態(tài)。


Microprofile.io

Microprofile 把自己定義成“一個(gè)基準(zhǔn)平臺(tái),以微服務(wù)架構(gòu)為基準(zhǔn)來(lái)優(yōu)化企業(yè)版 Java,并交付可在多個(gè) Microprofile 運(yùn)行時(shí)上運(yùn)行的應(yīng)用程序”。它從 2016 年夏天啟動(dòng),現(xiàn)在已經(jīng)成為了 Eclipse 的項(xiàng)目,最初貢獻(xiàn)者包括 TomiTribe、IBM 和 Payara,Oracle 也在 2017 年 11 月加入其中。

Microprofile 的第一個(gè)版本在 JavaOne 2016 上發(fā)布,涵蓋了 JAX-RS 2.0、CDI 1.2 和 JSON-P 1.0。

從那以后,社區(qū)同時(shí)開(kāi)始了多個(gè)項(xiàng)目,包括:

microprofile-config

microprofile-fault-tolerance

microprofile-health

microprofile-metrics

microprofile-open-api

microprofile-jwt-auth

Microprofile.io 的最初目標(biāo)是專注于 JCP 標(biāo)準(zhǔn)的快速創(chuàng)新,而現(xiàn)在也可以被認(rèn)為是 EE4J 在社區(qū)、組織和監(jiān)管方面的“POC(概念性驗(yàn)證)”。

Microprofile.io 的未來(lái)將去向何處?與 EE4J 合并抑或是繼續(xù)保持獨(dú)立?現(xiàn)在還沒(méi)有定論。

EE4J

EE4J 的章程上寫道:“Eclipse Enterprise for Java(EE4J)是一個(gè)開(kāi)源倡議,旨在建立和實(shí)現(xiàn)標(biāo)準(zhǔn) API,為 Java 運(yùn)行時(shí)提供技術(shù)工具,促進(jìn)服務(wù)器端和云原生應(yīng)用的開(kāi)發(fā)、部署和管理。EE4J 以 Java 平臺(tái)和 Java EE 標(biāo)準(zhǔn)為基礎(chǔ),并在 Java EE 8 的基準(zhǔn)上建立新的標(biāo)準(zhǔn)”。

需要注意的是,EE4J 只是項(xiàng)目的名稱,而不是一個(gè)品牌。2017 年 11 月份,他們?yōu)閷ふ液线m的品牌名稱進(jìn)行過(guò)一次問(wèn)卷。但因?yàn)槭艿缴鲜龅囊恍┫拗?,至今未達(dá)成共識(shí)。不過(guò),社區(qū)當(dāng)中有 79% 的人似乎希望能夠保留 Java EE 這個(gè)品牌。

2017 年 11 月,項(xiàng)目管理委員會(huì)成立,成員來(lái)自原先的 Java EE 生態(tài)系統(tǒng)。委員會(huì)的首要任務(wù)是完成過(guò)渡、建立新的社區(qū),以及基于 Java EE 8 發(fā)布第一個(gè)版本。

目前有兩個(gè)項(xiàng)目正式成為 EE4J 的一部分:

Yasson:JSON-B 的參考實(shí)現(xiàn)。

EclipseLink:JPA 的參考實(shí)現(xiàn)。

開(kāi)源(Java EE)對(duì)于廠商的影響

對(duì)于 Java EE 廠商(Red Hat、IBM、TomiTribe 和 Payara)來(lái)說(shuō):

他們?cè)?JCP 中將擁有更多的話語(yǔ)權(quán)和影響力。

他們可以自由地訪問(wèn)測(cè)試套件,而之前它是屬于 Oracle 的。

他們可以迭代推出“應(yīng)用服務(wù)器”,不需要再承受 Java EE 新版本發(fā)布的“隧道效應(yīng)”所帶來(lái)的痛苦。

應(yīng)用服務(wù)器的未來(lái)

新的 Java EE 會(huì)成為“保護(hù)傘”抑或是由一系列獨(dú)立的規(guī)范組成?

由此引申出的問(wèn)題是:應(yīng)用服務(wù)器會(huì)繼續(xù)扮演“單體平臺(tái)”的角色,還是會(huì)變成可組合的模塊平臺(tái)?

我傾向于選擇第二種可能,Red Hat 的 Wildfly Swarm 就是最好的例子。

開(kāi)源 Java EE 對(duì)開(kāi)發(fā)者社區(qū)的影響

對(duì)于開(kāi)發(fā)者社區(qū)來(lái)說(shuō),這是一個(gè)很好的機(jī)會(huì),他們需要一個(gè)敏捷的平臺(tái)來(lái)促進(jìn)創(chuàng)新。

對(duì)于開(kāi)發(fā)者個(gè)人而言,參與 EE4J 是一個(gè)非常好的提升個(gè)人影響力的途徑。推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【六七八,二四一,五六三】,無(wú)論你是大牛還是小白,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開(kāi)發(fā)工具,很多干貨和技術(shù)資料分享

王者風(fēng)范

對(duì)于用戶來(lái)說(shuō),目前的處境很艱難。Java EE 的優(yōu)勢(shì)在于一系列由 JCP 推動(dòng)的官方標(biāo)準(zhǔn),而依賴這些標(biāo)準(zhǔn)對(duì)于長(zhǎng)期項(xiàng)目來(lái)說(shuō)是至關(guān)重要的。

Java EE 的上一個(gè)階段已經(jīng)走到了尾聲,不管高興與否,我們都要繼續(xù)與它共同前行。新的 Java EE 標(biāo)準(zhǔn)將為我們帶來(lái)什么?沒(méi)有了 JCP 的支持,EE4J 將如何發(fā)展?

這一切要取決于行動(dòng)的快慢和實(shí)際結(jié)果的產(chǎn)出。我粗淺地認(rèn)為,這將受到以下幾個(gè)因素的影響:

時(shí)間:之前已經(jīng)提到,盡管 Java EE 8 仍有它的價(jià)值,但它并不是最先進(jìn)的,所以它需要盡快縮小差距,以便在競(jìng)爭(zhēng)中勝出。如果 EE4J 要花幾個(gè)月“才能”交付一個(gè)版本,那么要實(shí)現(xiàn)這個(gè)目標(biāo)就會(huì)很困難。

與 Microprofile.io 協(xié)作:Microprofile.io 已經(jīng)在云原生應(yīng)用方面發(fā)力,所以完全可以利用它,把它集成到 EE4J 中。

社區(qū):EE4J 社區(qū)將發(fā)展壯大到怎樣的程度?

還是時(shí)間:廠商和開(kāi)源項(xiàng)目是否有能力及時(shí)交付符合 EE4J 規(guī)范的平臺(tái)?Java EE 最大的一個(gè)問(wèn)題就是從規(guī)范最終版的發(fā)布到應(yīng)用服務(wù)器的實(shí)現(xiàn)需要很長(zhǎng)的時(shí)間。

不過(guò),就像昨天文章中評(píng)論的那樣,不管名字是否改變,面對(duì) Spring 框架的強(qiáng)力沖擊,Java EE 路在何方,現(xiàn)在還不好說(shuō)。從目前社區(qū)熱點(diǎn)來(lái)看,我只知道,Spring Boot、Spring Cloud 這套框架很受歡迎。

對(duì)于 Spring 生態(tài)和 Java EE 的關(guān)系,Jean-Fran?ois James 也做了評(píng)論(另外一篇文章)。

Java EE 和 Spring 的復(fù)雜關(guān)系

在之前評(píng)估 Java EE 生態(tài)系統(tǒng)對(duì) EE4J 發(fā)展的影響時(shí),我漏掉了一個(gè)非常重要的因素:Pivotal 和它的 Spring 框架。

Java EE 和 Spring 之間的關(guān)系已經(jīng)進(jìn)入了“最好的敵人”模式。

Spring 誕生于 2004 年,由 Rod Johnson 發(fā)起,作為對(duì) J2EE(Java 2 Platform,Enterprise Edition)和 EJB 2 復(fù)雜性的反擊。從那個(gè)時(shí)候開(kāi)始,Spring 和 Java EE 之間就沒(méi)有停止過(guò)競(jìng)爭(zhēng),并彼此影響對(duì)方:

Spring(以及 Hibernate)的出現(xiàn)刺激了 Java EE 社區(qū),促使他們推出了 EJB 3 和 JAP 1.0。

Spring Batch 直接影響到了 Batch 規(guī)范(JSR 352)。

Spring Dependency Injection 啟發(fā)了 CDI(Context and Dependency Injection)。

Spring 恰到好處地使用了 J2EE 和 Java EE 中的某些標(biāo)準(zhǔn),如 Servlet、JMS 和 JPA。

Spring 5 宣稱兼容 Java EE 8。

從誕生之日起,Spring 就因?yàn)槌瑥?qiáng)的實(shí)用性受到了開(kāi)發(fā)者的青睞,而且它的演進(jìn)速度很快,可以快速地集成新技術(shù):NoSQL、AMQP、微服務(wù)、云原生應(yīng)用……

從 2006 年開(kāi)始,Java EE 也將提升易用性和對(duì)開(kāi)發(fā)者的友好放在首位,但在演進(jìn)速度方面還是很慢,主要有兩個(gè)原因:

JCP 制定規(guī)范需要很長(zhǎng)時(shí)間:即使是一個(gè)輕量級(jí)的規(guī)范,也需要多方參與,需要更長(zhǎng)的時(shí)間才能達(dá)成一致。

實(shí)現(xiàn)和認(rèn)證:在規(guī)范發(fā)布之后,需要幾個(gè)月時(shí)間才能找到符合認(rèn)證的應(yīng)用服務(wù)器。

而最近,這方面的差距在加大:

Spring Boot 將“以約定代替配置(Convention Over Configuration)”的原則發(fā)揮到了極致,進(jìn)一步提升易用性。

Spring Cloud 利用 Netflix 的開(kāi)源組件解決了與云原生應(yīng)用開(kāi)發(fā)相關(guān)的問(wèn)題,如服務(wù)注冊(cè)、服務(wù)發(fā)現(xiàn)、彈性、負(fù)載均衡、監(jiān)控……

Spring 5 將反應(yīng)式編程提升為一等公民。

Java EE 在這方面的速度要慢的多。在 2013 年發(fā)布 Java EE 7 之后,經(jīng)歷了一段消停期。2016 年,在社區(qū)的壓力下,Oracle 才發(fā)布了一個(gè)新的路線圖。

Java EE 8 發(fā)布于 2017 年 9 月,雖然人們對(duì)其期望甚高,但并非革命性的。人們還是把更多的目光投向了 Java EE 9,期望下一個(gè)版本會(huì)有更多的創(chuàng)新。

與此同時(shí),Eclipse 基金會(huì)于 2016 年中啟動(dòng) Microprofile.io 項(xiàng)目,旨在以微服務(wù)架構(gòu)為基準(zhǔn)來(lái)優(yōu)化企業(yè)版 Java,以此來(lái)推動(dòng) Java EE 生態(tài)系統(tǒng)的發(fā)展。Microprofile 1.0 涵蓋了 JAX-RS 2.0、CDI 1.2 和 JSON-P 1.0,1.2 版本于 2017 年 9 月發(fā)布,加入了更多特性,如配置、容錯(cuò)、JWT、度量指標(biāo)和健康檢測(cè),2.0 版本有望與 Java EE 8 看齊。

過(guò)渡到 EE4J

EE4J 旨在提供一種更加靈活的協(xié)作方式,但要成功,有一些前提是不可或缺的:

Java EE 8 遺留資產(chǎn)的轉(zhuǎn)移(規(guī)范文檔、參考實(shí)現(xiàn)和測(cè)試套件)。據(jù) David Delabassee 所述,這項(xiàng)工作已經(jīng)在進(jìn)行當(dāng)中。

建立新的監(jiān)管模型和操作系統(tǒng),在最近發(fā)布的工作組章程中已經(jīng)提到了這一點(diǎn)。

建立活躍的社區(qū)。

品牌和包的重新命名:Oracle 不允許 EE4J 在新規(guī)范中重用“Java EE”這個(gè)商標(biāo)和 javax 這個(gè)包名,所以需要重新起一個(gè)名字。

在滿足了這些條件之后,EE4J 就可以繼續(xù)演進(jìn),適應(yīng)云原生應(yīng)用和 Java SE 平臺(tái)(特別是 Java 的模塊化系統(tǒng))的變更。

大一統(tǒng)的時(shí)機(jī)?

除了監(jiān)管和技術(shù)之外,EE4J 必須為自己找到合適的位置,因?yàn)闆](méi)有了 JCP 的支持,它作為標(biāo)準(zhǔn)的地位就不復(fù)存在。在這樣的情況下,EE4J 已無(wú)力與 Spring 展開(kāi)競(jìng)爭(zhēng)?;蛘哒f(shuō),整個(gè) Java 生態(tài)系統(tǒng)經(jīng)不起這樣的“內(nèi)戰(zhàn)”。Java 在應(yīng)用服務(wù)器方面的霸主地位已經(jīng)一去不復(fù)返,它必須與其他平臺(tái)展開(kāi)競(jìng)爭(zhēng),比如 Node.js、Go 和 Python。如果能夠?qū)⒄麄€(gè)社區(qū)甚至整個(gè)行業(yè)的力量帶動(dòng)起來(lái),那就更好了。

為什么不呢?如果 EE4J 能夠推出一些獨(dú)立的兼容規(guī)范,Spring 團(tuán)隊(duì)就可以參與進(jìn)來(lái),讓 Spring 成為 EE4J 的主要參與者。

作為 Java 開(kāi)發(fā)者和用戶,我們拭目以待。我的夢(mèng)想,會(huì)成真嗎?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 從今天開(kāi)始讀《深入理解 Java 虛擬機(jī)》一書(shū),并開(kāi)設(shè)了同名專題 深入理解 Java 虛擬機(jī)。計(jì)劃在 2 周內(nèi)將全...
    SawyerZh閱讀 10,460評(píng)論 17 215
  • 22 歲,對(duì)于一個(gè)技術(shù)人來(lái)說(shuō)可謂正當(dāng)壯年。但對(duì)于一門編程語(yǔ)言來(lái)說(shuō),情況可能又有不同。各類編程語(yǔ)言橫空出世,紛戰(zhàn)不休...
    程序員技術(shù)圈閱讀 378評(píng)論 0 1
  • http://www.cnblogs.com/firstyi/archive/2007/11/01/945745....
    lmem閱讀 811評(píng)論 0 0
  • 下課時(shí)分,短暫而又喧鬧。 她坐在最后一排的位置上,正在向前座女生請(qǐng)教上節(jié)數(shù)學(xué)課的問(wèn)題。一把椅子,正倒在她的旁邊。她...
    蘇錯(cuò)閱讀 512評(píng)論 1 1
  • 他會(huì)喝酒,拼的不是酒量。而是舌尖上的運(yùn)動(dòng),他是一個(gè)味蕾工作者。而且是一個(gè)很靚的味蕾工作者。 初次見(jiàn)...
    波王爺閱讀 476評(píng)論 0 0

友情鏈接更多精彩內(nèi)容