WildFly评估之WildFly的模块化系统

感谢朋友【吴杰】投递本文。

WildFly,前身是JBoss AS,从V8开始为区别于JBoss EAP,更名为WildFly。Wildfly 8主要具备如下特性:

  • Java EE7的参考实现(2013年7月止尚未得到Java EE7兼容认证)
  • 启动速度更快,占用内存更少
  • 模块化(JSR294)设计
  • 统一配置管理
  • 分布式domain管理

本文主要讨论一下WildFly 8的模块化系统。

WildFly之所以启动很快,模块化组件jboss-modules功不可没。作为OSGi和Jigsaw(JSR 294 http://jcp.org/en/jsr/detail?id=294)“夹击”之下的衍生物,与jboss-msc成为WildFly的全新内核。

jboss-modules解决什么问题

JBoss Modules就是解决传统的层级机制的ClassLoader所带来的Jar Hell问题:

(1)     JAR被加载后不使用导致资源浪费。

(2)     同名JAR包的不同版本混在导致依赖冲突。

JBoss Modules使所有的jar都打包成为模块,一个jar再也不会看到依赖中有版本冲突的类,或者加载到一个不需要加载的资源。同时,按需加载模块可以明显地提高大型应用的启动时间。

图 1 传统的ClassLoading vs. jboss-modules的ClassLoading



传统的ClassLoading vs. jboss-modules的ClassLoading

与Jigsaw(JSR 294)的关系

Jigsaw已经被延迟到Java SE 9。JBoss Modules会与JSR294兼容,如果Jigsaw项目能够稳定,并且成为OpenJDK的一部分,JBoss承诺将维护JBoss Modules的兼容性。

与OSGi的关系

个人认为是互补的关系,通过Jboss-modules进行模块化的应用服务器,使得OSGi的Bundle形式不再成为模块化的唯一方式,更加灵活。另外它更为小巧,没有OSGi的Sevice层,或者其他OSGI提供的更高层次的功能,它只做一件事情,就是模块化。

图 2 WildFly Architecture



WildFly Architecture

注:上图中的Subsystems没有列全,full-ha Profile的子系统如下图:

图 3 full-ha的子系统一览



full-ha的子系统一览

接下来简单与Oracle的Java EE 7的RI,GlassFish V4.0做一个简单的架构对比

图 4 GlassFish V4.0与WildFly 8的系统栈图



GlassFish V4.0与WildFly 8的系统栈图

笔者观点】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的设计,原因以下:

(1)     通过JBoss Modules将WildFly与OSGi解耦,并且兼容Jigsaw。设计上更为优雅,且更具远见。

(2)     OSGi在Java EE开发领域并没有被广泛接受(如下图,来自于zeroturnaround),离真正落地尚需时日。JBoss的设计理念更贴近开发人员。

图 5 2012年度Java标准的被接受度一览



2012年度Java标准的被接受度一览

时间: 2025-01-21 05:56:18

WildFly评估之WildFly的模块化系统的相关文章

OSGi与Equinox创建高度模块化系统

问题描述 OSGi与Equinox创建高度模块化系统 有没有哪位大侠学过<OSGi与Equinox创建高度模块化系统>这本书,跪求指导啊,如果同在一个区域,可当面交流并重谢... 解决方案 开发平台" rel="nofollow">http://osgi.help 有成熟的开源开发平台.

Java 模块化系统初探

Java 模块化系统自提出以来经历了很长的时间,直到 2014 年晚些时候才最终以 JSR(JSR-376) 定稿,而且这个部分有可能在 Java 9 中出现.但是一直以来都没有可以使用的原型.9 月 11 日,OpenJDK 发布的早期构建版本终于包含了 Jigsaw 项目. 昨天,我和同事 Paul Bakker 在 JavaZone 上对于 Java 模块化系统进行了讨论.整个讨论都建立在JSR-376 需求文档以及身边一些珍贵的信息上.在年初提出举行这个报告的时候,我们曾深信不疑地认为在

数据中心模块化系统的设计的八大要求

据中心经历了从集中式数据中心,到分布式数据中心,再到现在的模块化数据中心的发展过程.数据中心的模块化系统包括模块化UPS.模块化空调系统等,可以说是未来数据中心发展的一大趋势,那么当前模块化系统的设计对数据中心有哪些要求呢?我们一起来认识一下. 1.模块的功能定义:每个系统模块和子系统功能模块都应有明确的完整的功能定义,并对输入.输出.安装环境等作出明确的规定. 2.模块化系统应由若干子系统功能木块组成. 3.模块化的集成度:根据功能定义确定集成度. 4.模块化与标准化:系统中各个子系统功能模块

JCP EC 投票否决 Java 模块化系统

JCP Executive Committee 公布了对 Java Platform Module System(或称为 Jigsaw)的投票结果,以 10 票赞成 13 票反对否决了该提议. 投反对票的机构包括了 HPE(惠普企业).Redhat.IBM.SAP.Twitter.Eclipse 基金会等.这一结果并不出人意料,在这之前,EC 成员 Redhat 和 IBM 公开谈论他们反对模块化系统的观点,认为会导致不兼容. Redhat JBoss 群组的架构副总裁 Scott Stark

WildFly评估之消息子系统

WildFly,前身是JBoss AS,从V8开始为区别于JBoss EAP,更名为WildFly.HornetQ是JBoss开发的一个独立的消息中间件,被整合进WildFly作为消息子系统. HornetQ完全支持JMS,HornetQ不但支持JMS1.1 API同时也定义属于自己的消息API(如下图中的Core Client),以最大限度地提升HornetQ的性能和灵活性. 图 1 客户程序HornetQ的两种交互模式 关于Core Client的API介绍请参见:http://docs.j

微软正评估对雨林木风新系统采取维权措施

12月31日消息,据国外媒体报道,针对雨林木风工作室近日推出的开源操作系统"Ylmf OS",微软表示,将会关注此事,以保护自己的知识产权. 雨林木风此前主要从事Windows XP系统优化工作,2008年12月宣布解散.但本月又卷土重来,推出了自己的"Ylmf OS"操作系统. Ylmf OS基于Ubuntu系统,但在界面上却高仿Windows XP,因此引发了业内的侵权质疑.但Ylmf OS基于Linux系统,而不是Windows XP,根据当前的法规很难定论.

Java微服务开发指南 -- 使用WildFly Swarm构建微服务

使用WildFly Swarm构建微服务     我们最后介绍一个新的微服务框架,它构建在支持分层且可靠的JavaEE技术栈上(使用JBoss WildFly 应用服务器),WildFly Swarm是一个完全兼容WildFly应用服务器,它基于可重用的组件,这里称为元件(fractions)来组成微服务应用.组装这些元件和你使用maven或者gradle去添加依赖一样简单,你只需要声明元件,WildFly Swarm将会帮助你完成后续的工作.     应用服务器和JavaEE在企业级Java应

WildFly Swarm 2017.6.0 发布,Java 应用服务器

WildFly Swarm 2017.6.0 发布了. 新特性 More YAML less main() Update to WF Camel 4.7.0 发布页详情 下载地址 WildFly是红帽公司新一代应用服务器.支持动态模块化.集中化管理.Java EE 7,而WildFly swarm是WildFly的微服务化支持,和spring boot类似.但是WildFly swarm完整的支持JAVA EE的准标. WildFly Swarm采取的可执行文件"uberjars"打包

Red Hat发布WildFly Application Server 10.1版

WildFly的独特之处在于,无须任何特殊的JVM标志(哪怕在Java 8中!),无须更改配置,甚至无须更改Keystore,即可直接支持HTTP/2.只须将浏览器指向8443端口,WildFly即可为您自动生成自签名的TLS证书,并在浏览器支持的情况下进行HTTP/2协商(大部分浏览器均已支持).当准备好部署到生产环境后,只需要用打算为用户使用的证书更新Keystore即可. 默认domain.xml文件中一个名为"load-balancer"的新增配置文件进一步改善了负载平衡能力.