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的设计理念更贴近开发人员。