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标准的被接受度一览
WildFly评估之WildFly的模块化系统相关推荐
- Oracle的Java模块化系统保卫战
2017年企业新兴技术(ETE)大会上最为及时的演讲之一要算由Oracle JVM负责人Karen Kinnear呈献的"Java的未来:模块化及其他".在她演讲之前的这段时间发生 ...
- Java9新特性系列(模块化系统: Jigsaw-Modularity)
模块化的前时代 Ant时代 相信大家对Ant都不陌生,Ant是任务型的,定义了一系列的任务dir/compile/jar等等,缺点是操作文件 Maven时代 Maven/Gradle相对于Ant,增加 ...
- Java平台模块化系统(JSR 376)通过公开测评复议投票
Java平台模块化系统(JPMS,Java Platform Module System)亦称为Jigsaw项目或JSR 376.尽管在两个月前JPMS未通过最初的公开评测投票(Public Revi ...
- 聊一聊ABP vNext的模块化系统
官网: https://abp.io/ 开源: https://github.com/abpframework/abp EasyAbp: https://easyabp.io/ Abp 模块: htt ...
- 培训效果评估反馈调查/企业问卷调查系统
项目名称:培训效果评估反馈调查/企业问卷调查系统 开发周期:2012-03-05~2012-03-09(五天) 开发环境:VS2008+SQLServer2005 功能介绍:采用B/S模式,适用于集团 ...
- 模块化系统开发 一
为什么会有模块化系统,从我们提高班现有的系统:机房收费系统.教务系统.基础数据库系统.考试系统.评教系统.ERP系统等无外乎这些系统之间都涉及权限的灵活性配置.菜单的显隐的灵活.标签的动态加载.数据库 ...
- java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API
目录 Java 9 的新特性 JDK 和 JRE 目录结构的改变 模块化系统: Jigsaw -> Modularity 实现目标 模块 结构 jShell命令 产生背景 设计理念 实现目标 j ...
- 使用JDK9提供的模块化系统,来定义自己的模块
JDK9提供的模块化系统 Java模块化系统的背景 模块是什么 模块化的目标 可靠的配置 强封装 增强可扩展性能和可维护性 可定制的运行环境 模块的类型 1.具名模块(Named Module) 2. ...
- 走近Java模块化系统OSGi
OSGI是什么? 刚入软件开发行业的初哥可能会觉得到处都是值得顶礼膜拜的大神,到处都是复杂到自已无法把握的代码,惊叹这些大神怎样能写出如此神奇的程序出来?! 其实真正好的软件的代码,应该是结构清晰,简 ...
最新文章
- 大话日志分析与管理,答题赠书活动
- cubieboard 将linux debian 系统灌入Nand中的操作记录
- 官宣:OpenMMLab 重磅升级—百花齐放春满园
- mysql前一天_mysql查询当天,前一天,一周,一个月
- 吴恩达深度学习1.3笔记_Neural Networks and Deep Learning_浅层神经网络
- 谁知道怎么编写侧边栏的代码吗?
- 填报true\false和复选框应用及导出打印显示复
- TCP/IP四层协议模型与ISO七层模型(TCP/IP系统学习(2))
- R语言——查看内置数据集
- Skype 登陆地址或登陆凭据有问题的解决方法
- 阿里云10M带宽服务器实际下载速度测试说明
- Quartz数据库表分析
- F2FS源码分析-1.6 [F2FS 元数据布局部分] Segment Summary Area-SSA结构
- 【520表白】C语言开发《浪漫流星雨》表白程序,源码来了!
- [家里蹲大学数学杂志]第389期中国科学院大学2014-2015-1微积分期中考试试题参考解答...
- linux time 查看cp,Linux命令:cp、time、cut、awk 、獲取文件大小命令
- Java基础:this关键字可在方法参数和成员变量同名时进行区分
- [日语二级词汇]日语二级必会汉字总结4
- Exploiting sample correlation for crowd counting with multi-expert network
- 中国电信业重组方案敲定!——新的格局拭目以待
热门文章
- arduino跑python,尝试在我的Arduino和stu上执行Python3.7.2中的代码
- def __init__(self)是什么意思_子类必须调用 super().__init__() 吗?
- 【java】Maven工程引入各种jar包的功能
- Jrebel 热部署插件的使用和破解
- python银行家算法代码_避免死锁的银行家算法C++程序实现
- 解决请求中400的问题
- log4j日志记录级别是如何工作?
- linux第七章《档案与目录管理》重点回顾
- ArcEngine中的缩放地图
- #define WIN32_LEAN_AND_MEAN 的作用