Docker著手將容器部署到私有云與公有云
在今年的Java 20周年的慶祝大會中,JavaOne 2015 的中心議題是“Java 的20年”。甲骨文公司Java平臺軟件開發部的副總裁Georges Saab的主題演講就將關注點放在了java的發展歷程、它主要的發展里程碑,并且深度關注于Java8及其更新。甲骨文公司Java平臺首席架構師Mark Reinhold的主題演講奠定了Java發展的路線圖,并展示了定于2016年Q3季度發布的Java9 。
Reinhold提到Java成功的關鍵在于辨識到了痛點;找出了缺失的抽象類并添加了抽象類,以此方式來滿足現有的解決方案。
Reinhold還說到“目標是隨著時間的推移,要持續改善開發人員的開發效率,同時保留Java的可讀性、簡化性、通用性以及兼容性的核心價值。”
他推斷,缺失的抽象類已經引領了Java5的泛型與Java8的lambdas表達式中的重大創新。2008年,Jigsaw項目引入了 模塊 的概念,以此來解決兩個不同的痛點:類路徑地獄(Classpath Hell)和龐大的單體 JDK。
類路徑地獄(Classpath Hell)
據Reinhold所稱,類路徑(Classpath)的根本問題在于它們不僅僅是類。他說“類路徑是一種查找類的方式,不必關心組件、包甚至它們的預期用途。”
在類路徑中,甚至都無法確定你們尋找的類就在jar文件內;我們也不知道是否有任何與應用開發接口相關的沖突。并且,當開發人員不知道或是不理解內部接口的目的,并對其進行改變時,內部接口就可能會暴露出一些安全問題。
據Reinhold所稱,模塊為jar文件提供了一個強有力的抽象類,模塊是一個程序組件,它不僅能在java編程語言中實現,在java 虛擬機中同樣也能。正如他所說的“模塊是脫離類路徑地獄(Classpath Hell)的關鍵。”
- 模塊可被看做是包的容器,與此同時,該模塊也表述了它與其他模塊是如何聯系的;
- 模塊是包的容器;
- 模塊為其依賴的其他模塊命名;
- 一個模塊不會對其他模塊進行干擾;
- 模塊只有通過其它依賴它的模塊才能輸出特定的包來使用。
為了在Java9中使用模塊,所需的jar 文件中的模塊必須在module-info.java文件中進行聲明。文件名不是一個類的名字,它是一個約定,就像package-info.java一樣;但它仍可以通過javac進行編譯。模塊化的jar文件包含module-info.class。該模塊化的jar文件可作為一個單獨的產物進行傳送;對于java9預先發布的版本來說,模塊化jar文件就像常規jar文件一樣運行。
Reinhold提到,通過允許終端用戶以從下到上或從上到下的方式將現有的系統進行模塊化,模塊的采用就大大地簡化了。
單體JDK
Jigsaw項目提供了很多新的用例,傳統意義上來講這些用例不適合龐大的單體Java SE JDK。某些用例包括:
- 小型設備——沒有足夠空間去存儲所有的Java SE 包。
- 云應用——不需要復制整個的Java SE JDK。因為在云中,密度是主要因素。(注:密度指的是能為一套特定的軟硬件進行交付的系統與服務的數量。)
- 維護與安全——龐大、整體化的JDK系統在子系統之間存在著千絲萬縷的聯系。并且,它缺乏內部接口的封裝,這會導致安全問題。
據Reinhold所稱,“模塊為強有力的封裝提供可依賴的配置。”
有了模塊化,伴隨著增強的安全性,開發人員只使用需要的功能。因此,在JDK 9中,所有非關鍵的內部接口將被封裝。某些關鍵的內部接口例如sun.misc.Unsafe仍然可以訪問。(絕大部分)內部接口封裝的提出表明“JDK 9中引入的、替換掉原有版本的關鍵內部接口在JDK 9中將被棄用,或者被封裝或者在JDK 10中被刪除。”
Reinhold 提到被封裝后的內部接口仍可以在編譯時和運行時通過命令行標志來進行訪問。
延伸資源:
有關Jigsaw項目的更多信息,請查閱:
查看英文原文: JavaOne 2015 Keynotes (Part 1)