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

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

文章转自 并发编程网-ifeve.com

WildFly评估之WildFly的模块化系统相关推荐

  1. Oracle的Java模块化系统保卫战

    2017年企业新兴技术(ETE)大会上最为及时的演讲之一要算由Oracle JVM负责人Karen Kinnear呈献的"Java的未来:模块化及其他".在她演讲之前的这段时间发生 ...

  2. Java9新特性系列(模块化系统: Jigsaw-Modularity)

    模块化的前时代 Ant时代 相信大家对Ant都不陌生,Ant是任务型的,定义了一系列的任务dir/compile/jar等等,缺点是操作文件 Maven时代 Maven/Gradle相对于Ant,增加 ...

  3. Java平台模块化系统(JSR 376)通过公开测评复议投票

    Java平台模块化系统(JPMS,Java Platform Module System)亦称为Jigsaw项目或JSR 376.尽管在两个月前JPMS未通过最初的公开评测投票(Public Revi ...

  4. 聊一聊ABP vNext的模块化系统

    官网: https://abp.io/ 开源: https://github.com/abpframework/abp EasyAbp: https://easyabp.io/ Abp 模块: htt ...

  5. 培训效果评估反馈调查/企业问卷调查系统

    项目名称:培训效果评估反馈调查/企业问卷调查系统 开发周期:2012-03-05~2012-03-09(五天) 开发环境:VS2008+SQLServer2005 功能介绍:采用B/S模式,适用于集团 ...

  6. 模块化系统开发 一

    为什么会有模块化系统,从我们提高班现有的系统:机房收费系统.教务系统.基础数据库系统.考试系统.评教系统.ERP系统等无外乎这些系统之间都涉及权限的灵活性配置.菜单的显隐的灵活.标签的动态加载.数据库 ...

  7. java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API

    目录 Java 9 的新特性 JDK 和 JRE 目录结构的改变 模块化系统: Jigsaw -> Modularity 实现目标 模块 结构 jShell命令 产生背景 设计理念 实现目标 j ...

  8. 使用JDK9提供的模块化系统,来定义自己的模块

    JDK9提供的模块化系统 Java模块化系统的背景 模块是什么 模块化的目标 可靠的配置 强封装 增强可扩展性能和可维护性 可定制的运行环境 模块的类型 1.具名模块(Named Module) 2. ...

  9. 走近Java模块化系统OSGi

    OSGI是什么? 刚入软件开发行业的初哥可能会觉得到处都是值得顶礼膜拜的大神,到处都是复杂到自已无法把握的代码,惊叹这些大神怎样能写出如此神奇的程序出来?! 其实真正好的软件的代码,应该是结构清晰,简 ...

最新文章

  1. 大话日志分析与管理,答题赠书活动
  2. cubieboard 将linux debian 系统灌入Nand中的操作记录
  3. 官宣:OpenMMLab 重磅升级—百花齐放春满园
  4. mysql前一天_mysql查询当天,前一天,一周,一个月
  5. 吴恩达深度学习1.3笔记_Neural Networks and Deep Learning_浅层神经网络
  6. 谁知道怎么编写侧边栏的代码吗?
  7. 填报true\false和复选框应用及导出打印显示复
  8. TCP/IP四层协议模型与ISO七层模型(TCP/IP系统学习(2))
  9. R语言——查看内置数据集
  10. Skype 登陆地址或登陆凭据有问题的解决方法
  11. 阿里云10M带宽服务器实际下载速度测试说明
  12. Quartz数据库表分析
  13. F2FS源码分析-1.6 [F2FS 元数据布局部分] Segment Summary Area-SSA结构
  14. 【520表白】C语言开发《浪漫流星雨》表白程序,源码来了!
  15. [家里蹲大学数学杂志]第389期中国科学院大学2014-2015-1微积分期中考试试题参考解答...
  16. linux time 查看cp,Linux命令:cp、time、cut、awk 、獲取文件大小命令
  17. Java基础:this关键字可在方法参数和成员变量同名时进行区分
  18. [日语二级词汇]日语二级必会汉字总结4
  19. Exploiting sample correlation for crowd counting with multi-expert network
  20. 中国电信业重组方案敲定!——新的格局拭目以待

热门文章

  1. arduino跑python,尝试在我的Arduino和stu上执行Python3.7.2中的代码
  2. def __init__(self)是什么意思_子类必须调用 super().__init__() 吗?
  3. 【java】Maven工程引入各种jar包的功能
  4. Jrebel 热部署插件的使用和破解
  5. python银行家算法代码_避免死锁的银行家算法C++程序实现
  6. 解决请求中400的问题
  7. log4j日志记录级别是如何工作?
  8. linux第七章《档案与目录管理》重点回顾
  9. ArcEngine中的缩放地图
  10. #define WIN32_LEAN_AND_MEAN 的作用