WildFly,前身是JBoss AS,從V8開始爲區別於JBoss EAP,改名爲WildFly。Wildfly 8主要具有以下特性:segmentfault
本文主要討論一下WildFly 8的模塊化系統。服務器
WildFly之因此啓動很快,模塊化組件jboss-modules功不可沒。做爲OSGi和Jigsaw(JSR 294 http://jcp.org/en/jsr/detail?id=294)「夾擊」之下的衍生物,與jboss-msc成爲WildFly的全新內核。架構
JBoss Modules就是解決傳統的層級機制的ClassLoader所帶來的Jar Hell問題:dom
JAR被加載後不使用致使資源浪費。分佈式
同名JAR包的不一樣版本混在致使依賴衝突。模塊化
JBoss Modules使全部的jar都打包成爲模塊,一個jar不再會看到依賴中有版本衝突的類,或者加載到一個不須要加載的資源。同時,按需加載模塊能夠明顯地提升大型應用的啓動時間。spa
Jigsaw已經被延遲到Java SE 9。JBoss Modules會與JSR294兼容,若是Jigsaw項目可以穩定,而且成爲OpenJDK的一部分,JBoss承諾將維護JBoss Modules的兼容性。設計
我的認爲是互補的關係,經過Jboss-modules進行模塊化的應用服務器,使得OSGi的Bundle形式再也不成爲模塊化的惟一方式,更加靈活。另外它更爲小巧,沒有OSGi的Sevice層,或者其餘OSGI提供的更高層次的功能,它只作一件事情,就是模塊化。內存
注:上圖中的Subsystems沒有列全,full-ha Profile的子系統以下圖:資源
接下來簡單與Oracle的Java EE 7的RI,GlassFish V4.0作一個簡單的架構對比
【筆者觀點】GlassFish與WildFly在架構實現上最大區別在於模塊系統的構成。
GlassFish的作法
採用OSGi的模塊化做爲GlassFish的模塊化系統/基盤;用HK2替代了OSGi的服務層。
WildFly的作法
鑑於Jigsaw的難產,JBoss推出本身的模塊化實現並做爲WildFly的模塊化系統/基盤;將JBoss MSC(Module Service Container)做爲其服務容器。默認狀況下將OSGi排除在WildFly系統棧以外(從8.0.0.Alpha3開始OSGi子系統已經從WildFly移除,從此將提供以add-on的形式與Wildfly集成。https://issues.jboss.org/browse/WFLY-1638),該點與GlassFish不一樣(GlassFish與OSGi運行時是緊耦合的)。
排除廠商利益因素,筆者更喜歡JBoss的設計,緣由如下:
經過JBoss Modules將WildFly與OSGi解耦,而且兼容Jigsaw。設計上更爲優雅,且更具遠見。
OSGi在Java EE開發領域並無被普遍接受(以下圖,來自於zeroturnaround),離真正落地尚需時日。JBoss的設計理念更貼近開發人員。