關(guān)鍵要點(diǎn)
Java 9將在2017年發(fā)布,一個(gè)標(biāo)志性的特性是新的模塊化系統(tǒng),命名為Java平臺(tái)模塊化系統(tǒng)(JPMS)。本文探討了它與現(xiàn)有的Java標(biāo)準(zhǔn)組件如何關(guān)聯(lián)起來,以及它對(duì)現(xiàn)有的Java標(biāo)準(zhǔn)組件有什么影響。
自1.0版本以來,Java已經(jīng)增長(zhǎng)了20倍,模塊化平臺(tái)是非常必要的。為了解決這個(gè)問題,也曾有過很多失敗的嘗試。而與此同時(shí),OSGi已經(jīng)提供應(yīng)用程序模塊化16年。
OSGi和JPMS在實(shí)現(xiàn)細(xì)節(jié)上有本質(zhì)上的區(qū)別。如果JPMS被當(dāng)作模塊化的通用解決方案,似乎會(huì)有嚴(yán)重的缺陷和缺失的功能。
JPMS的目標(biāo)是使用起來比OSGi更簡(jiǎn)單、更容易。但是,讓現(xiàn)有的非模塊化產(chǎn)品模塊化是非常復(fù)雜的,而且JPMS在這個(gè)目標(biāo)上似乎沒有成功。
JPMS在Java平臺(tái)自身模塊化方面做得很好,這意味著我們可以為特定的工作構(gòu)建一個(gè)小的運(yùn)行時(shí)環(huán)境,它只包含Java平臺(tái)相關(guān)的部分。在應(yīng)用程序模塊化方面OSGi有很多優(yōu)勢(shì)。我們已經(jīng)證明了兩者可以結(jié)合起來,這看起來是一個(gè)成功的方式。
Java 9將在明年發(fā)布,一個(gè)標(biāo)志性的特性是新的模塊化系統(tǒng):Java平臺(tái)模塊化系統(tǒng)(JPMS)。雖然JPMS的細(xì)節(jié)還沒有完全確定,我們已經(jīng)了解了很多有關(guān)它方向性的內(nèi)容。
Java已經(jīng)有一個(gè)預(yù)先存在的模塊化系統(tǒng),自2000年以來一直以各種形式存在。它就是被稱為OSGi的模塊化系統(tǒng),是一個(gè)獨(dú)立于供應(yīng)商的行業(yè)標(biāo)準(zhǔn)。它由OSGi聯(lián)盟發(fā)布,由領(lǐng)先的軟件供應(yīng)商、電信公司和其他組織(包括Adobe、博世、華為、IBM、Liferay、NTT、Oracle、Paremus 以及Software AG)組成。它推進(jìn)了幾乎所有的Java EE應(yīng)用服務(wù)器、最流行的IDE、Web應(yīng)用程序(像eBay、Salesforce.com和Liferay),并用于政府和軍隊(duì),如美國(guó)空軍和聯(lián)邦航空管理局。
OSGi是為物聯(lián)網(wǎng)提供的——OSGi一開始是專為嵌入式設(shè)備設(shè)計(jì)的,那是在很多年前,當(dāng)時(shí)內(nèi)存和CPU資源明顯受到局限?,F(xiàn)在設(shè)備有了更多的能力。這提供了構(gòu)建復(fù)雜應(yīng)用程序和解決方案的機(jī)會(huì),并催生了蓬勃發(fā)展的生態(tài)系統(tǒng),在這個(gè)生態(tài)系統(tǒng)中組織和個(gè)人貢獻(xiàn)的軟件和硬件元素可以添加到整體解決方案中。這樣的生態(tài)系統(tǒng)在市場(chǎng)上很廣泛,包括互聯(lián)家庭、車聯(lián)網(wǎng)、智能城市和工業(yè)4.0(IIoT)。網(wǎng)關(guān)通常用于傳感器和設(shè)備之間相互連接,并連接到后端系統(tǒng)。應(yīng)用程序和服務(wù)可以在本地網(wǎng)關(guān)和/或云上運(yùn)行。
OSGi還提供多種規(guī)范啟用構(gòu)建開放的物聯(lián)網(wǎng)生態(tài)系統(tǒng)的基本特性。這些特性包括設(shè)備管理、軟件配置以及設(shè)備抽象,即從底層通信協(xié)議歸納設(shè)備。在今天,像AT&T、博世、NTT、德國(guó)電信、美國(guó)通用電氣、日立、美諾、施耐德電氣等公司都受益于采用OSGi構(gòu)建物聯(lián)網(wǎng)的解決方案,并且做了很多年。目前已經(jīng)有上百萬的設(shè)備連接采用OSGi和物聯(lián)網(wǎng)。
當(dāng)然,OSGi的用戶都很好奇Java 9中新的模塊化系統(tǒng)在短期和長(zhǎng)期將會(huì)如何影響OSGi。
Java生態(tài)系統(tǒng)中很快會(huì)出現(xiàn)兩個(gè)模塊化系統(tǒng),這有技術(shù)、政治和商業(yè)的原因。本文中,我們避開政治原因,從技術(shù)的角度對(duì)兩者進(jìn)行比較。我們總結(jié)了JPMS和OSGi如何協(xié)同工作,思考它們各自的領(lǐng)域是什么以及在嶄新的世界中存在什么樣的機(jī)遇。
請(qǐng)注意,本文中,我們使用的信息在2016年8月已公開發(fā)布。在該規(guī)范確定之前一些細(xì)節(jié)可能會(huì)改變。
背景
自1990年代末誕生以來Java平臺(tái)增長(zhǎng)顯著。綜觀下載文件的大小,JDK 1.1為10Mb,而Mac OS X下載JDK 8u77卻非常大,有227Mb。安裝占用的空間和內(nèi)存需求也有了相應(yīng)的增加。這些增加是因?yàn)樵黾恿诵碌墓δ?,而且大部分功能是受歡迎并且有用的。然而,每一個(gè)新的功能都為不需要這個(gè)功能的用戶創(chuàng)造了膨脹——沒有人會(huì)使用平臺(tái)所有的功能。而且即使已經(jīng)過時(shí),所有現(xiàn)有的功能都會(huì)保留,因?yàn)镴ava管理員提供了令人欽佩的奉獻(xiàn)精神——向后兼容性。
多年來,Java體重的增加并不是一個(gè)大問題。它是最流行的企業(yè)平臺(tái),它的主要競(jìng)爭(zhēng)對(duì)手是微軟的.NET,然而.NET也有著相似的軌跡。在當(dāng)今世界,Java面臨不同的挑戰(zhàn)。物聯(lián)網(wǎng)推動(dòng)了空間占用新一輪的關(guān)注,新的、靈活的平臺(tái)和語言(比如Node.js、Go)都是非常有競(jìng)爭(zhēng)力的對(duì)手。
安全也是一個(gè)大問題:Java攻擊引起了組織對(duì)安全意識(shí)的重視,把它從用戶桌面完全移除。如果內(nèi)部JVM和用戶空間應(yīng)用程序代碼之間有更好的隔離,這些攻擊是不可能發(fā)生的。
很早之前我們就清楚需要為模塊化平臺(tái)做一些事情了。在2000年中期有一系列失敗的嘗試,例如,JSR 294和它的“superpackages”,JSR 277的“Java模塊化系統(tǒng)”——最終名為Jigsaw的原型項(xiàng)目出現(xiàn)了。這本來是在2011年Java 7中提交的,但被推遲到Java 8再推遲到Java 9。作為一個(gè)原型項(xiàng)目,Jigsaw為JPMS規(guī)范提供了參考實(shí)現(xiàn)。