從Java EE到Jakarta EE,企業(yè)版Java的發(fā)展歷程
本文轉(zhuǎn)載自微信公眾號「BAT的烏托邦」,作者YourBatman。轉(zhuǎn)載本文請聯(lián)系BAT的烏托邦公眾號。
前言
你好,我是YourBatman。
誕生于1985年的Java語言,早已年過三旬,甚至已經(jīng)越過“35歲魔咒”,比很多同學(xué)的年齡大得多。正所謂三十年河?xùn)|,三十年河西,有人說Java已廉頗老矣,基本結(jié)構(gòu)過于老套不靈活,但顯示情況是它“老而不死”依舊常年霸榜,是棵常青樹。
深愛Java的同學(xué)知道,Java并不老(Python年紀(jì)更大)、開發(fā)效率并不低(馬拉松型選手看中長遠(yuǎn)效率)、語法并不是啰嗦(這是嚴(yán)謹(jǐn)?shù)谋憩F(xiàn),同時也擁抱了Stream流式、Function函數(shù)式編程來簡化開發(fā))。Java鼓勵用嚴(yán)謹(jǐn)?shù)姆椒ā⒄_的方式來設(shè)置內(nèi)容,這讓Java程序員們對待代碼更有全局性,更適合構(gòu)建規(guī)模性的企業(yè)級項(xiàng)目。
另外,Java做到了哪怕最新版JDK能(幾乎)100%兼容首個版本,這無不依靠于優(yōu)秀的設(shè)計(jì)和規(guī)范的制定。2000年左右隨著Java的高速發(fā)展,被大量用于企業(yè)應(yīng)用的開發(fā),所以迫切需要規(guī)范的解決方案。
正所謂一流企業(yè)定標(biāo)準(zhǔn)、二流企業(yè)做品牌、三流企業(yè)做產(chǎn)品,這個活Sun公司自然不會放過,它就是企業(yè)版Java,也叫Java EE(后改名為Jakarta EE)。Java EE是一些列技術(shù)標(biāo)準(zhǔn)的集合(只定標(biāo)準(zhǔn),不提供實(shí)現(xiàn)),其中很多技術(shù)經(jīng)歷這么多年的發(fā)展已經(jīng)很成熟、應(yīng)用得很廣泛了。但深入了解后會發(fā)現(xiàn),Java EE很多技術(shù)都是起個大早,趕個晚集,否則也不會有Spring現(xiàn)在的絕對霸主地位。
本文提綱
版本約定
- Java EE:6、7、8
- Jakarta EE:8、9、9.1
正文
上面說到,Java能夠歷久彌新得益于它是非常嚴(yán)謹(jǐn)?shù)?、注重編碼規(guī)范、注重設(shè)計(jì)規(guī)范的編程語言。按照規(guī)范實(shí)施做到有據(jù)可循,實(shí)施過程又可反饋給規(guī)范,形成正反饋的周而復(fù)始,越來越完善。
本專欄將介紹Java EE/Jakarta EE相關(guān)的幾十種技術(shù),作為Java企業(yè)級開發(fā)的標(biāo)準(zhǔn)技術(shù),很多技術(shù)應(yīng)用非常廣泛。本文作為第一篇,將從發(fā)展歷程出發(fā),先一起全方位的了解到它。
JDK發(fā)展簡史
在講述Java EE的發(fā)展歷程之前,先簡要回顧(普及)一下JDK的發(fā)展史,方便在時間上對應(yīng)參照,畢竟開發(fā)者一般對JDK的版本會更熟、更敏感些。
誕生:1995年5月,Oak語言改名為Java,標(biāo)志著Java的誕生,并且提出了著名的Write Once,Run Anywhere口號。下面用表格形式記錄其發(fā)版時間軸。
版本 | 發(fā)布日期 | 焦點(diǎn)說明 |
---|---|---|
JDK 1.0 | 1996.01 | Java虛擬機(jī)、基礎(chǔ)類庫 |
JDK 1.1 | 1997.02 | 規(guī)定了Jar文件格式,JDBC、JavaBeans、RMI等。開始支持內(nèi)部類和反射 |
JDK 1.2 | 1998.12 | 引入集合框架Collections、Map等。從此版本開始,分為3個版本:J2SE/J2EE/J2ME(注:1999.04著名的HotSpot虛擬機(jī)誕生,順勢推出了Java EE首個版本) |
JDK 1.3 | 2000.05 | 千禧年的第一個版本,對類庫進(jìn)行了優(yōu)化 |
JDK 1.4 | 2002.02 | 支持正則Pattern、NIO、JDBC 3.0、assert斷言 |
JDK 5 | 2004.09 | JDK命名方式變化、自動拆裝箱、泛型、枚舉、可變參數(shù)、增強(qiáng)for循環(huán)、JUC并發(fā)包等等非常多新特性 |
JDK 6 | 2006.12 | 編譯器注解處理器(lombok的原理)、J2xx改為Java XX |
JDK 7 | 2009.02 | try-with-resources、NIO2(也叫AIO)、泛型推斷 |
JDK 8 | 2014.03 | 憋了5年的大招,果然經(jīng)典。Lambda表達(dá)式、函數(shù)式編程、Stream流式編程、方法引用、接口默認(rèn)方法、徹底移除HotSpot的永久代 |
... | ... | ... |
JDK 11 | 2018.09 | Jigsaw模塊化、增強(qiáng)類型推斷、革命性的垃圾收集器ZGC |
... | ... | ... |
JDK 17 | 2021.09 | ...敬請期待 |
期間,關(guān)于Java/Sun公司有些大事記,記錄一下。
日期 | 事件 |
---|---|
1995.05 | Java語言誕生 |
1996.01 | JDK 1.0版本發(fā)布 |
1998.12 | JAVA2企業(yè)平臺J2EE發(fā)布(和JDK 1.2一起) |
2005.06 | JavaOne大會召開(Java誕生10周年),J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME |
2009.04 | 甲骨文Oracle以現(xiàn)金收購Sun微系統(tǒng)公司,交易價(jià)格74億美元(Sun公司市值頂峰時超2000億美金。眼看他起高樓,眼看他宴賓客,眼看他樓塌了)。Sun公司最大的資產(chǎn),便是Java。從此Java商標(biāo)被Oracle收入囊中,才有了后來的Oracle PK Google大戰(zhàn) |
2017.08 | Oracle將Java EE(Java SE還自己保留)交給開源組織,Eclipse基金會接手。但Oracle不允許開源組織使用Java名號,所以Jakarta EE名稱于2018.02.26應(yīng)運(yùn)而生 |
什么是Java EE?
作為一個(資深)的Java開發(fā)者,這似乎是一個很簡單的問題。
Java是一種可以撰寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言。它分為三個版本:
- Java SE(J2SE):標(biāo)準(zhǔn)版?;A(chǔ)中的基礎(chǔ),后面2個版本都依賴于它。當(dāng)前最新版本是Java 17(LTS版本,將于2021年9月發(fā)布)
- Java EE(J2EE):企業(yè)版。用于企業(yè)級大型應(yīng)用開發(fā),包含了Web、Security、Management等幾十種標(biāo)準(zhǔn)技術(shù)
- Java ME(J2ME):移動版。隨著Android/iOS的流行,它已幾乎銷聲匿跡
由于Java EE能夠直接應(yīng)用于企業(yè)級應(yīng)用開發(fā),解決實(shí)際問題,直接產(chǎn)生價(jià)值,因此也常說它價(jià)值更高。所以用谷歌百度一下“Java培訓(xùn)”關(guān)鍵字,基本都是培訓(xùn)Java EE的。
作為common sense,特別是Java程序員除了需對JDK的歷史有所了解外,Java EE的發(fā)展歷程也是有必要知道的,畢竟這是基礎(chǔ)知識點(diǎn),是聊天的談資,是你的內(nèi)功。
Java EE發(fā)展史
J2EE(JavaEE)自1999年首次發(fā)布以來,已成為實(shí)現(xiàn)和部署可移植、多層企業(yè)應(yīng)用程序的集成標(biāo)準(zhǔn)(它是標(biāo)準(zhǔn),它是規(guī)范),現(xiàn)在了解下它的發(fā)展史,記錄到如下表格(從成體系的Java EE 1.4版本開始)。
說明:該表格是YourBatman翻閱多處資料搜集整合,全網(wǎng)最全的一份,請收藏使用。
版本 | 發(fā)布日期 | 焦點(diǎn)說明 |
---|---|---|
J2EE 1.4 | 2003.12 | 對Web服務(wù)更好支持。啟用javax命名空間。Servlet 2.4、JSP 2.0、EJB 2.1等 |
Java EE 5 | 2006.05 | 以Web為著力點(diǎn)繼續(xù)優(yōu)化。Servlet 2.5、JSP 2.1、EJB 3.0、注解支持等 |
Java EE 6 | 2009.12 | 添加了大量新技術(shù)來簡化開發(fā),如:Servlet 3.0(異步處理)、Bean Validation、EJB 3.1、JSF 2.0、JPA 2.0、上下文和依賴注入(CDI) |
Java EE 7 | 2013.06 | 提高生產(chǎn)力滿足企業(yè)需求和HTML5。Servlet 3.1、WebSocket 1.0、JSON 1.0、JMX 2.0、Batch 1.0 |
Java EE 8 | 2017.08 | 增加了JSON綁定和安全相關(guān)。Servlet 4.0、Bean Validation 2.0、CDI 2.0、JPA 2.2 |
Jakarta EE入局 |
2017.08 |
Oracle將Java EE交給開源組織,Eclipse基金會接手(Apache基金會爆冷出局還是不想要?)。但Oracle不允許開源組織使用Java名號,所以Jakarta EE名稱于2018.02.26應(yīng)運(yùn)而生 |
Jakarta EE 8 | 2019.09 | 規(guī)范與Java EE 8完全相同。Maven的GAV變了:javax.servlet:javax.servlet-api:4.0.1 -> jakarta.servlet:jakarta.servlet-api:4.0.2 ,但命名空間沒變依舊還是javax.*,算是個小過度吧 |
Jakarta EE 9 | 2020.11 | 沒有加入新功能,Eclipse基金會的首個正式版本。命名空間從javax.* 遷移到jakarta.* ,前者從此成為歷史。所有模塊大版本號+1,如Servlet 4.0.2 -> Servlet 5 以表示其斷層式升級 |
Jakarta EE 9.1 | 2021.06 | 相較于9 沒有 加入新API。主要提供對Java SE 11的運(yùn)行支持 |
2017年隨著Oracle把Java EE交給開源基金會,Java EE從此成為歷史,接下來將由社區(qū)驅(qū)動的Jakarta EE取而代之。
雖然Java EE已成過去式,但它似乎代表著我們的程序青春,依然是溝通的主力。因此,在很長很長很長一段時間內(nèi),Java EE知名度依舊蓋過Jakarta EE,溝通交流中使用它居多。
Tips:Java EE版本號和Java SE沒有絕對聯(lián)系。如即使到最新的Jakarta EE 9、9.1版本對JDK的最低要求是8,而非9
咱們程序員可能會吐槽Oracle為毛不讓使用Java EE商標(biāo),這么搞太費(fèi)勁了。但在Oracle眼中,可能,一切都是利益(Oracle號稱是一個律師比工程師數(shù)量還多的高科技企業(yè))
補(bǔ)充:什么是Eclipse基金會
2004年2月該非盈利組織的正式成立,由包括開發(fā)者、消費(fèi)者和插件提供商在內(nèi)的各獨(dú)立團(tuán)體組成的董事會,為Eclipse的長期發(fā)展負(fù)責(zé),它就是Eclipse基金會。
該基金會最初只有19個開源項(xiàng)目,現(xiàn)在有300+個之多,我們比較熟悉的就有:
Java開發(fā)工具:功能強(qiáng)大的Java開發(fā)IDE Eclipse
眾多Jakarta項(xiàng)目:Jakarta Annotations、Jakarta Bean Validation、Jakarta JSON Processing等等
Vert.X:一個面向現(xiàn)代web和企業(yè)的異步應(yīng)用框架,一個可能會撼動Spring地位的全家桶框架
另外,可把Eclipse基金會和Apache基金會對照著看,程序員對后者理應(yīng)更熟悉些。
什么是Jakarta EE
該名稱的由來和兩個大事記有關(guān):
為了讓Java EE更開放,Oracle決定為它尋找一個新東家(呵呵,我笑而不語)。2017年8月,Oracle將Java EE交給開源組織,Eclipse基金會接手(Apache爆冷出局還是不想要?)
Oracle拒絕讓基金會繼續(xù)使用Java名字,因此Eclipse做了一項(xiàng)名義調(diào)查,從Jakarta EE和Enterprise Profile兩個名稱中二選一,前者大比例勝出。所以在2018年3月份,Eclipse宣布正式將Java EE更名為Jakarta EE,并且確定了logo(如上圖)。另外,跟著更名的還有一些和Java EE緊密相關(guān)的名詞,如Glassfish -> Eclipse Glassfish;JCP -> EE.next;ODM(Oracle Development Management) -> PMC
總而言之:Jakarta EE你可認(rèn)為它(的內(nèi)容)就是Java EE,只是名字換了,老東家換了。之前由JCP來推動它的發(fā)展,以后將有開源社區(qū)推動。至于前景如何,咱們拭目以待。
Jakarta EE發(fā)展史
Jakarta EE還很年輕,2017年8月從Oracle手中接棒過來算起,也不過4歲,談不上什么發(fā)展史,是好是壞周期太短也不能早下定論。截止到目前,共發(fā)布了三個版本,內(nèi)容幾乎沒有變化,只在命名空間、版本號方面稍有改變,記錄如下:
版本 | 發(fā)布日期 | 焦點(diǎn)說明 |
---|---|---|
Jakarta EE 8 | 2019.09 | 規(guī)范與Java EE 8完全相同。Maven的GAV變了:javax.servlet:javax.servlet-api:4.0.1 -> jakarta.servlet:jakarta.servlet-api:4.0.2 ,但命名空間沒變依舊還是javax.*,算是個小過度吧 |
Jakarta EE 9 | 2020.11 | 沒有加入新功能,Eclipse基金會的首個正式版本。命名空間從javax.* 遷移到jakarta.* ,前者從此成為歷史。所有模塊大版本號+1,如Servlet 4.0.2 -> Servlet 5 以表示其斷層式升級 |
Jakarta EE 9.1 | 2021.06 | 相較于9 沒有 加入新API。主要提供對Java SE 11的運(yùn)行支持 |
一站式聚合API
如你所知,Java EE/Jakarta EE是幾十種技術(shù)(規(guī)范)的幾何,幾乎每種技術(shù)都有其API(對應(yīng)一個Jar),為了方便總攬全局,Java EE自6版起提供了一站式聚合API,導(dǎo)入一個就夠了:
- <dependency>
- <groupId>javax</groupId>
- <artifactId>javaee-api</artifactId>
- <version>6.0.0</version>
- <scope>provided</scope>
- </dependency>
- <!-- Jakarta命名空間版本 -->
- <dependency>
- <groupId>jakarta.platform</groupId>
- <artifactId>jakarta.jakartaee-api</artifactId>
- <version>9.1.0</version>
- <scope>provided</scope>
- </dependency>
效果如下:
特別注意:實(shí)際工作中不建議使用這種粗暴的、大而全的導(dǎo)入方案,而是應(yīng)該按需導(dǎo)入精確把握,還classpath一片“干凈”,并且也能做到心中有數(shù),方可運(yùn)籌帷幄。
有Java EE SDK嗎?
既然Java SE有JDK,那么Java EE是否也有SDK呢?答案:有的。Oracle官網(wǎng)/Jakarta EE官網(wǎng)均提供了SDK供以下載:https://www.oracle.com/java/technologies/javaee-8-sdk-downloads.html
只不過此SDK可能讓你失望了,它不是傳統(tǒng)的軟件開發(fā)工具包,而更像是一個技術(shù)合集,并且和自家的Glassfish強(qiáng)綁定,包含有以下內(nèi)容:
- doc官方文檔
- 幾十種技術(shù)的使用samples(基于Maven管理、構(gòu)建)
- glassfish容器,強(qiáng)耦合
總的來講,如若是抱著學(xué)一學(xué)的目的那么可以down下來玩玩,畢竟里面的samples示例、文檔比較全。如若你是抱著使用的目的,那就不建議了,畢竟glassfish我們(國內(nèi))很少使用。
總結(jié)
30年彈指一揮間,Java EE在逐漸淡出Java開發(fā)者的視野,但中短期來看它依舊是我們繞不過的內(nèi)容,經(jīng)常能聽到、看到、聊到。當(dāng)在研究Spring等開源框架的時候,也經(jīng)常會看到Java EE的影子。
本文介紹了Java EE的發(fā)展史,目的是對它有個籠統(tǒng)的認(rèn)識。從Java EE到Jakarta EE,它能否重新煥發(fā)生命力我不知道,但留下來的不少東西依舊是目前的主流(如Servlet規(guī)范、JPA等等),具有非常高的學(xué)習(xí)價(jià)值,切莫輕視。