- 輕量級Java EE企業(yè)應(yīng)用開發(fā)實戰(zhàn)
- 柳偉衛(wèi)編著
- 2621字
- 2022-07-29 14:31:12
1.1 Java EE發(fā)展簡史
Java是很受歡迎的編程語言,而Java EE則是應(yīng)用廣泛的企業(yè)級架構(gòu)。Java平臺在經(jīng)歷了20多年的發(fā)展后,已然成為開發(fā)者首選的“利器”。大型互聯(lián)網(wǎng)公司也多選擇Java作為主力開發(fā)語言,這些企業(yè)包括Google、IBM、Oracle等外企,也包括華為、京東、百度、阿里巴巴等國內(nèi)名企。Java以其穩(wěn)定而著稱,特別是“Write Once,Run Anywhere”(一次編寫,各處運行)的特性,非常適合互聯(lián)網(wǎng)企業(yè)對于快速推出產(chǎn)品、部署產(chǎn)品的需求。
1.1.1 Java平臺發(fā)展簡史
在2020年年初的TIOBE編程語言排行榜中,Java位居榜首。圖1-1展示的是2020年3月TIOBE編程語言排行榜情況(https://www.tiobe.com/tiobe-index)。回顧歷史,Java語言的排行也一直是名列三甲。
然而,作為當(dāng)今企業(yè)級應(yīng)用的首選編程語言,Java的發(fā)展并非一帆風(fēng)順。
1991年,Sun公司準(zhǔn)備用一種新的語言來設(shè)計用于智能家電類(如機(jī)頂盒)的程序開發(fā)。“Java之父”James Gosling創(chuàng)造出了這種全新的語言,并命名為Oak(橡樹),以他辦公室外面的樹來命名。然而,由于當(dāng)時的機(jī)頂盒項目并沒有競標(biāo)成功,因此Oak被陰差陽錯地應(yīng)用到萬維網(wǎng)。
1994年,Sun公司的工程師編寫了一個小型萬維網(wǎng)瀏覽器WebRunner(后來改名為HotJava),該瀏覽器可以直接用來運行Java小程序(Java Applet)。

圖1-1 TIOBE編程語言排行榜
1995年,Oak改名為Java。由于Java Applet可以實現(xiàn)一般網(wǎng)頁所不能實現(xiàn)的效果,引來了業(yè)界對Java的熱捧,因此當(dāng)時很多操作系統(tǒng)都預(yù)裝了Java虛擬機(jī)。
1997年4月2日,JavaOne會議召開,參與者逾1萬人,創(chuàng)下了當(dāng)時全球同類會議規(guī)模的紀(jì)錄。
1998年12月8日,Java 2企業(yè)平臺J2EE發(fā)布,標(biāo)志著Sun公司正式進(jìn)軍企業(yè)級應(yīng)用開發(fā)領(lǐng)域。
1999年6月,隨著Java的快速發(fā)展,Sun公司將Java分為3個版本,即標(biāo)準(zhǔn)版(J2SE)、企業(yè)版(J2EE)和微型版(J2ME)。從這3個版本的劃分可以看出,當(dāng)時Java語言的目標(biāo)是覆蓋桌面應(yīng)用、服務(wù)器端應(yīng)用及移動端應(yīng)用3個領(lǐng)域。
2004年9月30日,J2SE 1.5發(fā)布,成為Java語言發(fā)展史上的又一里程碑。為了凸顯該版本的重要性,J2SE 1.5被更名為Java SE 5.0。
2005年6月,JavaOne大會召開,Sun公司發(fā)布了Java SE 6。此時,Java的各種版本已經(jīng)更名,已取消其中的數(shù)字2,即J2EE被更名為Java EE,J2SE被更名為Java SE,J2ME被更名為Java ME。
2009年4月20日,Oracle公司以74億美元收購了Sun公司,從此Java歸屬于Oracle公司。
2011年7月28日,Oracle公司發(fā)布Java 7正式版。該版本新增了(如try-with-resources語句、增強(qiáng)switch-case語句)支持字符串類型等特性。
2011年6月中旬,Oracle公司正式發(fā)布了Java EE 7。該版本的目標(biāo)在于提高開發(fā)人員的生產(chǎn)力,滿足苛刻的企業(yè)需求。
2014年3月19日,Oracle公司發(fā)布Java 8正式版。該版本中的Lambda表達(dá)式、Streams流式計算框架等廣受開發(fā)者關(guān)注。
由于Java 9中計劃開發(fā)的模板化項目(或稱Jigsaw)存在比較大的技術(shù)難度,JCP執(zhí)行委員會內(nèi)部成員也無法達(dá)成共識,因此造成了該版本的發(fā)布一再延遲。Java 9及Java EE 8終于在2017年9月發(fā)布,Oracle公司宣布將Java EE 8移交給了開源組織Eclipse基金會。同時,Oracle公司承諾,后續(xù)Java的發(fā)布頻率調(diào)整為每半年一次。截至目前,Java新版本為Java 15。圖1-2所示為Java EE 8整體架構(gòu)圖。

圖1-2 Java EE 8整體架構(gòu)圖
有關(guān)Java新平臺的內(nèi)容可以參閱筆者所著的《Java核心編程》。
1.1.2 Java EE現(xiàn)狀
2018年2月26日,Eclipse基金會社區(qū)正式將Java EE更名為Jakarta EE,也就是說,后續(xù)的Java企業(yè)級發(fā)布版本將命名為Jakarta EE。這個名稱來自Jakarta——一個早期的Apache開源項目,但該改名行為并未得到Java社區(qū)的支持。Java EE Guardians社區(qū)負(fù)責(zé)人Reza Rahman就Java EE重命名的問題做了一項Twitter調(diào)查,結(jié)果顯示,68%的Java開發(fā)者認(rèn)為應(yīng)該保留Java EE名稱。2019年9月10日,Jakarta EE 8終于發(fā)布,該版本旨在與Java EE 8規(guī)范完全兼容。在本書中,為了避免混淆,統(tǒng)一采用Java EE命名來代表J2EE、Jakarta EE或JEE。
1.EE4J的使命
EE4J(Eclipse Enterprise for Java)是一項開放源代碼計劃,旨在為Java運行時創(chuàng)建標(biāo)準(zhǔn)API、這些API的實現(xiàn)以及技術(shù)兼容性套件,以實現(xiàn)服務(wù)器端和云本地應(yīng)用程序的開發(fā)、部署和管理。EE4J基于Java平臺企業(yè)版(Java EE)標(biāo)準(zhǔn),并使用Java EE 8作為創(chuàng)建新標(biāo)準(zhǔn)的基準(zhǔn)。
EE4J允許使用靈活的流程、靈活的許可以及用于平臺演進(jìn)的開放治理流程。一個開放的過程不依賴于單個供應(yīng)商或領(lǐng)導(dǎo)者,它鼓勵參與和創(chuàng)新,并服務(wù)于整個社區(qū)的集體利益。
EE4J通過使用通用流程和通用兼容性要求定義一套集成的標(biāo)準(zhǔn)來建立其組成項目之間的通用性。EE4J通過提供Java EE 8和EE4J版本之間的兼容性為現(xiàn)有用戶和新用戶提供兼容性。
EE4J的成功取決于:
- Java EE 8技術(shù)快速過渡到EE4J項目。
- 靈活和開放的流程,用于發(fā)展EE4J標(biāo)準(zhǔn)API、這些API的實現(xiàn)以及技術(shù)兼容性套件。
- 一個由開發(fā)人員、供應(yīng)商和最終用戶組成的強(qiáng)大社區(qū),支持并發(fā)展EE4J技術(shù)。
- 適應(yīng)和發(fā)展EE4J技術(shù),并提供可滿足現(xiàn)有用戶新需求及吸引新用戶的創(chuàng)新。
- 滿足EE4J實現(xiàn)以及Java EE 8和EE4J版本之間定義良好的兼容性標(biāo)準(zhǔn)。
- 使競爭的供應(yīng)商和互補技術(shù)提供商能夠提供可為EE4J技術(shù)增值的創(chuàng)新。
EE4J的會員來自世界頂尖的科技公司,其中包括CA、CEA、Fujitsu、Huawei、IBM、Konduit、OBEO、Oracle、Red Hat、Bosch、SAP等。
2.EE4J與Jakarta EE的關(guān)系
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的目標(biāo)是創(chuàng)建與Java EE兼容的API。而完整的EE4J除了Java EE API外,還包括很多實現(xiàn)了Java EE API的產(chǎn)品,比如GlassFish、Grizzly等。
由于EE4J是基于Java EE 8技術(shù)標(biāo)準(zhǔn)的,且與Java EE 8的API是完全兼容的,因此用戶在從Java EE 8切換到EE4J項目時不會有難度。同時,EE4J由強(qiáng)大的供應(yīng)商和強(qiáng)大的社區(qū)作為支撐,所提供的創(chuàng)新解決方案更能夠滿足現(xiàn)有用戶的新需求,吸引新用戶。
3.不再使用JCP
長期以來,Java EE規(guī)范的制定都是由JCP(Java Community Process)來執(zhí)行的。JCP是一種針對Java技術(shù)開發(fā)標(biāo)準(zhǔn)技術(shù)規(guī)范的機(jī)制。它向所有人開放,任何人都可以參與審核,并提供Java規(guī)范請求(JSR)反饋。任何人都可以注冊成為JCP成員,并加入JSR專家組,成員甚至可以提交自己的JSR提案。
2018年1月,Oracle公司表示將來不再支持或建議使用JCP來增強(qiáng)Java EE,而是建議并支持使用EE4J推動的過程對Java EE 8規(guī)范進(jìn)行功能增強(qiáng)。在發(fā)給EE4J社區(qū)的郵件中,Oracle Web Logic Server產(chǎn)品管理高級主管Will Lyons傳達(dá)了這則消息。
簡而言之,未來Java EE的版本將由EE4J主導(dǎo)。
4.面向Cloud Native
2019年9月10日,Jakarta EE發(fā)布了第一個版本,即Jakarta EE 8。Jakarta EE 8與Java EE 8完全兼容,可以簡單理解為將Java EE 8的API完全遷移到了Jakarta EE平臺。
Jakarta EE發(fā)展的重點之一是創(chuàng)建Cloud Native(云原生)的Java應(yīng)用。畢竟未來Java企業(yè)級應(yīng)用都將會部署上云。
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
有關(guān)Cloud Native的內(nèi)容可以參閱筆者所著的《Cloud Native分布式架構(gòu)原理與實踐》。
- 一步一步學(xué)Spring Boot 2:微服務(wù)項目實戰(zhàn)
- Vue.js 3.x從入門到精通(視頻教學(xué)版)
- 零基礎(chǔ)學(xué)Java程序設(shè)計
- GeoServer Beginner's Guide(Second Edition)
- Learning FuelPHP for Effective PHP Development
- Unity 2D Game Development Cookbook
- Instant PHP Web Scraping
- Go語言開發(fā)實戰(zhàn)(慕課版)
- 大學(xué)計算機(jī)基礎(chǔ)實訓(xùn)教程
- Python 3快速入門與實戰(zhàn)
- HTML5 WebSocket權(quán)威指南
- SQL Server 2014 Development Essentials
- Python深度學(xué)習(xí):基于PyTorch
- Neo4j Graph Data Modeling
- Raspberry Pi By Example