WildFly评估之WildFly的模块化系统-阿里云开发者社区

开发者社区> boxti> 正文

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标准的被接受度一览


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9717 0
工业物联网或系统集成中应用消息队列(ActiveMQ,C#的demo)的场景全面分析
1.[连载]《C#通讯(串口和网络)框架的设计与实现》 2.[开源]C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 2.应用SuperIO(SIO)和开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案 3.
1581 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13436 0
RDIFramework.NET ━ .NET快速信息化系统开发框架-4.2 平台自动升级模块
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chinahuyong/article/details/7979370 RDIFramework.NET ━ .NET快速信息化系统开发框架 4.2 平台自动升级模块  4.2 平台自动升级模块   在软件的生命周期中,软件维护是一个重要的阶段,维护过程中涉及程序文件的升级更新。
3092 0
什么是模拟前端(AFE),模拟前端系统的结构
模拟前端处理的对象是信号源给出的模拟电视、模拟声音信号,其主要功能包括以下几个方面:  信号放大:当接收到的信号过于微弱,满足不了系统载噪比要求时,在前端要采用低噪声放大器进行放大,以提高载噪比。
3319 0
+关注
boxti
12535
10037
文章
1327
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载