在开源的Java应用服务器领域像JBossTomcat及Apache的Geronimo他们不仅仅是商业领域的领跑者同时是技术领域的先行者当然所有的Java EE应用服务器的实现不尽相同但其很多方面具有一定程度的可比性本文对JBossGeronimo 及Tomcat 三种开源的Java EE应用服务器就他们的特性部署及性能等方面进行一一比较
一 前言
当企业级的Java应用程序需要真正的应用部署时Java EE应用服务器是必不可少的工具研究表明除了商业的应用服务器之外开源的Java EE应用服务器开始成为很多Java企业级应用的最佳选择而JBossTomcat及Apache的Geronimo是其中最主流的开源Java EE应用服务器而这三者中尽管JBoss和Tomcat并非%的实现了Java EE 标准但这二者占有的市场份额相对比较大Geronimo是对Java EE 标准%的实现正在快速的发展如果读者想在Java EE领域找份像样的工作对这三种开源的应用服务器应该达到比较熟悉的程度并能在一定程度上进行比较区分
在本文中对这三种主流的应用服务器就其特性部署及性能等方面进行比较分析了他们各自的特色对该应用服务器的重要性当然也提供了一些如何选择适合项目的服务器的原则及建议
二 特性比较
表就JBoss Tomcat 及Geronimo 的特性进行全面的比较请注意表中用到的部分支持表述表明该应用服务器并非完全的支持需要安装一些额外包而其中的原则上支持表述表明该应用服务器需要第三方的安装包的支持注三种应用服务器均在LinuxSolarisWindows及Mac OS X上进行过测试
表Java EE应用服务器特性比较
特性
JBoss
Geronimo
Tomcat
Java EE 一致性
部分支持
完全支持
部分支持
支持EJB
支持
支持
原则上支持
JSP和Servlet
支持
支持
支持
JSF
支持
支持
原则上支持
客户化插件
支持
支持
不支持
业务规则引擎
原则上支持
原则上支持
原则上支持
Hibernatex
支持
原则上支持
原则上支持
集群
支持
支持
部分支持
Eclipse IDE
支持
支持
支持
当读者的应用需要比较特殊的扩展或是想与Java EE 最贴近时那么Geronimo 是最佳的开源Java EE应用服务器选择尽管JBoss 与Sun的Java EE标准在实现上有一定的出入但JBoss team提供了许多与Java EE标准很符合的技术同时也扩充了Java EE 的标准范围而Tomcat 本身就是一种轻量级的解决方案所以它不并包括Java EE 的所有特性或是在JBoss及Geronimo中所提供的特性但正是由于它的轻量级才使它对内存的占有量比较少并且比其它两种服务器运行起来更快
.Java EE 一致性
Sun公司的Java EE 标准是一种行业标准而作为这种标准的实现开源的Java EE 应用服务器应该与其尽量的保持一致因此Java EE 的一致性是一个很重要的指标在这三种开源的实现中Geronimo是实现得最好与Java EE 标准最贴近的应用服务器JBoss 支持绝大部分Java EE 的特性当然不久即将发布的JBoss 将完全支持Java EE 的所有特性而Tomcat一般看成是JSP/servlet的容器仅仅支持Java应用服务器的基本特性
.支持EJB
EJB(Enterprise JavaBeans)是指能在Java EE服务器部署的Java组件它通常将一些业务功能打包成可重用的组件新发布的EJB提供了许多新功能解决了旧版本中许多问题JBoss 及Geronimo 均支持EJBTomcat 本身并不支持EJB但Apache OpenEJB项目可以使Tomcat支持EJB据称Tomcat可以运行一种嵌入式的JBoss EJB容器
.支持JSP /Servlet
对JSP/servlet的支持是绝大部分Java服务器应提供的最基本功能JSP和Servlet是Java EE 对JSP/servlet的升级功能JBoss Geronimo 及Tomcat 均支持JSP/servlet这一特性
.支持JSF
JSF(Java Server Faces)是一种在Java EE应用部署的组件式架构提供基本的Web开发的用户界面与请求驱动的MVC(ModelViewController)的架构不同的是JSF采用了组件驱动的模式就目前的JSF而言JBoss 及Geronimo 都有很好的支持而运行在Tomcat 时有不少的问题待解决
.支持客户化插件
客户化插件支持意味着可以在原有应用服务器功能的基础上开发新的功能并能很好的协同使用在JBoss中使用MBeans(managed beans)来处理插件开发而Geronimo也采用类似的处理方式只是名称不一样叫GBeans这些客户的Beans为开发及部署客户资源时提供一系列统一的接口
.支持业务规则引擎
几乎所有的应用程序都是建立在一系列业务规则之上或称之为业务逻辑而业务规则引擎组件则能帮助管理与简化业务逻辑编程一般的编程过程中程序员最常见的逻辑有如if/then逻辑而有了业务规则引擎则可以实现许多更加智能的业务逻辑Drools作为一种业内很流行标准化的业务规则引擎在JBoss Geronimo 及Tomcat 中均可得到支持Geronimo完全支持Drools而JBoss支持Drools的历史最久已达三年之久并使JBoss/Drools成为了一种非常有市场竞争力的业务规则解决方案
.支持Hibernate x
Hibernate为Java编程提供了强有力的关系/对象模型(ORMObjectrelational mapping)Hibernate可以将面向对象的模型映射为关系型数据库这对Java开发来说是最有吸引力的Hibernate作为一种开源的软件最早就是由于JBoss的一个团队所开发(Gavin King)当然JBoss Geronimo 及Tomcat 均支持Hibernate
.支持JBoss Seam
JBoss Seam是一种着名的应用框架集成了众多的Java及Web技术例如AjaxJSFJava PortletsBPM(Businessprocess management)等技术Seam是JBoss的项目理所当然JBoss 自然支持它同样Geronimo 也支持JBoss Seam据JBoss Seam的开发团队称Tomcat可以通过使用JBoss嵌入式EJB 容器来支持JBoss Seam
.支持集群
集群通过并行在多台服务器运行同样的服务从而大大的提高应用的吞吐量达到所谓的高负荷的效果由于采用了数台服务器同时运行所以当其中的某台服务暂时或死机时对客户不会造成服务停止从而达到业务的可持续集群极大的提高了企业级的Java应用的性能吞吐量等能力
JBoss Geronimo 及Tomcat 均以同样的方式来支持集群JBoss在集群层使用及时复制的方式来达到集群的目的而Geronimo所发布的集群还处于测试阶段需要时间的考验如果有兴趣可以与Apache基金组织联系
. 支持Eclipse IDE
Eclipse是目前最流行的Java开发工具自然与Eclipse的集成是众多Java EE 应用服务器应该提供的功能JBossGeronimo及Tomcat均支持与Eclipse整合特别地JBoss还有自己的Eclipse版本称为Red Hat Developer Studio目前正处于测试的阶段利用Geronimo提供的工具可以省去手工配置XML文件的烦琐同时数据库连接池工具都可以自动的下载所需要的数据库连接驱动
三 部署
这三种应用服务器的安装均十分简单在相关的网站上下载zip或tar包进行解压唯一需要配置的是设置JAVA_HOME环境变量(不过一般均有配置)注意在Linux/Unix系统下需要先发送chmod命令
.Geronimo
对Geronimo 来说进行配置及部署Java应用程序非常的简单特别是通过它提供的Web控制台更加简单Geronimo控制提供了许多简单的功能来帮助开发人员进行应用程序的配置可以进行数据库的连接池测试及安全设置或配置等
图Geronimo控制台
JBoss
JBoss 有非常漂亮的Web管理控制台但它所提供的管理功能及特性与Geronimo不尽相同首先看到的是JBoss的状态及其监测信息但并没有提供部署功能而部署Java应用时只需要将它复制到default/deploy文件夹下面JBoss会自动的检测到它并进行相关的快速部署当然也可以通过修改配置jbossservicexml来进行客户应用程序所在目录的映射
图JBoss控制台
Tomcat
Tomcat 不愧为一款快速的轻量级的应用服务器它的控制台提供了基本的部署功能可以通过Tomcat的控制台进行服务的启动/停止及WAR包的deploy/undeploy操作当然也提供了Tomcat的运行状态及监测信息同时有很好的用户授权系统
图Tomcat控制台
四 性能
就可靠性而言性能应该是所以的应用服务器所应该提供的最重要的特性在本文中笔者做了一个小实验使用JSP页面及编译好的servlet来测试应用服务器所能处理的用户会话个数以及所能连接的用户数量当然实际的Java应用是更加复杂的而本实验中的JSP页面及servlet是比较简单的主要用于测试Web应用服务器的稳定性可靠性及速度
使用的测试机器为双核位 CPUG的内存在实验中让第一种应用服务器运行到个会话当然这些会话不并是同时连接
图多Session测试JSP页面结果
图多Session测试servlet结果
测试所用的代码量只有区区的几百行为了准确起见笔者对三种服务器使用了相同之处的配置当然如果采用实际的Java应用程序来测试时所得到的数据结果图会有一定的出入但大概的趋势会一致
JBoss 的表现不如Geronimo毕竟Geronimo 所采用的实现技术及思想都是最新的正如图所示Tomcat 的性能最好因为Tomcat 本身就是为JSP/servlet量身定做的Java EE 应用服务器相比起JBoos或Geronimo需要秒进行启动的长时间Tomcat仅仅需要秒钟
五 小结
在本文中笔者比较了主流的Java EE应用服务器的特性部署及性能方面的内容特性方面的比较应该有利于读者选择更加适合自己项目的Java EE应用服务器做到有目的性的选择服务器从而达到适合的效果
同时笔者测试比较了商用或开源的Java应用服务器发现商业的Java应用服务器不一定比开源的好反而在商业的应用服务器(如Sun的Java应用服务器或BEA的WebLogic)中的Bug比开源的的应用服务器更多些
JBossGeronimo及Tomcat是快速可靠的可用于处理部署大规模的Java企业级应用的服务器特别值得一提的是很多的高性能Java服务器技术都是从这些开源的应用服务器中总结与借鑒过来而不是从那些商业的应用服务器中发展而来