JBoss,Geronimo还是Tomcat?——三种开源Java应用服务器的比较
译者:李功健
原文:http://www.javaworld.com/javaworld/jw-12-2007/jw-12-appservers.html
目录
1. Java企业特性比较
1.1. Java EE 5兼容性
1.2. EJB 3(企业JavaBeans技术)能力
1.3. JSP 2.1和Servlet 2.5能力
1.4. JSF 1.2支持
1.5. 定制化插件支持
1.6. 业务规则引擎支持
1.7. Hibernate 3.x支持
1.8. JBoss Seam支持
1.9. 集群支持
1.10. Eclipse IDE支持
2. 安装与部署
2.1. 部署
3. 性能基准 4. 结论 5. 作者自传 6. 关于译者
概述
像JBoss、 Tomcat和Apache Geronimo这样的开源Java EE应用服务器轻松地立足于同类商业产品之中,并且真正地在技术革新中处于市场领先地位。但是这些开源Java EE应用服务器并不完全等同。在这篇文章中,我将从特性、部署和性能方面对 JBoss 4.2, Geronimo 2和 Tomcat 6三种服务器进行了比较。
当涉及到企业级应用开发时,Java企业版(Java EE)应用服务器被视为Web开发的标准。虽然有商业产品可供选择,但研究表明开源已经成为 企业IT基础设施中 熟悉的一部分。JBoss 4.2,Geronimo 2和Tomcat 6是3 种被广泛使用的开源的Java EE服务器。在它们之中,尽管JBoos和Tomcat都没有和Java EE完全兼容,但它们仍然保有主要的市场。与此同时,具有完全Java EE兼容性的Geronimo正迅速呈现出强劲的势头。如果你想在Java EE的职业市场中取得竞争优势,你就应该熟悉上述3种开放源代码的服务器,并了解它们之间的不同。
在本文中,我会在特性、部署和性能方面 比较这三种领先的开源Java应用服务器。并且解释为什么在每种应用服务器有多种多样的不同特性,同时也提供一些对如哪种服务器更适合你的企业架构的调 查。我在这里发表的讨论包括来自Red Hat的Chantal Yang和Apache软件基金会的评论。
表1.Java EE应用服务器特性比较
特性JBoss 4.2Geronimo 2Tomcat 6
Java EE 5一致性部分支持完全支持部分支持
支持EJB 3.0支持支持原则上支持
JSP2.1和Servlet2.5支持支持支持
JSF1.2支持支持原则上支持
客户化插件支持支持不支持
业务规则引擎原则上支持原则上支持原则上支持
Hibernate3.x支持原则上支持原则上支持
集群支持支持部分支持
Eclipse IDE支持支持支持
1. Java企业特性比较
表 1 提供了JBoss 4.2、Tomcat 6和Geronimo 2在实现Java EE功能特性方面的快速比较。请注意,特性被标记为部分表示没有完全被服务器支持,你需要安装额外的软件包。如果被标记为可选,则你必须安装第三方软件包 才能使用。这三种服务器都已经在Linux、Solaris、微软Windows和Mac OS X上测试过,JBoss已经在HP-UX和AIX上的测试,而Tomcat也在AIX上也测试过。在下面的表格中,你可以找到更多关于它们各自特性的信息 以及为什么这些特性如此重要。
表1. Java EE的特性比较
如 果你的Java应用需求尤为广泛或者你希望保持全部的Java EE 5兼容性的话,那么Geronimo 2将是明智的选择。虽然JBoss 4.2没有完全兼容Sun的Java EE 5标准,但是JBoss 4.2小组负责了一些尖端技术,而这些技术将被所有的服务器使用并且将被添加到标准的Java EE 5中。Tomcat 6本身是一个轻量级的解决方案,它不包含所有的Java EE 5 特性以及在JBoss和Geronimo中提供的额外软件包,但它不需要太多的内存,甚至在小型服务器上也能运行得很快。
现在,让我们看看为什么这些特性如此重要。
1.1. Java EE 5兼容性
如 果你的企业级Java应用必须完全兼容Sun的Java EE 5服务器特性的话,那么Java EE兼容性就是一个重要的问题。Geronimo是三种服务器中唯一完全兼容Java EE 5的。JBoss 4.2支持大部分的Java EE 5特性,而且Red Hat马上就要公布的JBoss 5将对Java EE 5完全兼容。Tomcat是一个JSP/Servlet容器,它只支持基本的Java应用服务器特性。
1.2. EJB 3(企业JavaBeans技术)能力
企 业JavaBeans(EJB)是一个为Java EE服务器应用开发服务的Java组件架构。它允许将功能封装到可重用组件中。早期版本的EJB被认为是难以开发的,即使其意图是给开发带来好处。而新的 EJB 3就是为了解决较早版本中存在的困难,并且提供了一些新的功能。JBoss 4.2和Geronimo都支持EJB 3。Tomcat本身不提供EJB 3的兼容性,但是你可以将Apache的 OpenEJB项目可以嵌入到Tomcat中使其支持EJB 3。根据Apache基金会的Jeff Genender所述,Tomcat也可以在JBoss的嵌入式版本中运行。
1.3. JSP 2.1和Servlet 2.5能力
JSP/servlet特性是任何Java服务器中最基本的能力。JSP 2.1和servlet 2.5是新版Java EE 5中提供的能力。JBoss 4.2、Geronimo 2和Tomcat 6都支持这些新的JSP/servlet版本。
1.4. JSF 1.2支持
JSF (Java Server Faces)是一个Java EE的应用开发架构,它使得开发基于Web的用户界面更加容易。JSF不是一个需求驱动的MVC(模型视图-控制器)的体系结构,而是使用了基于组件的方 法。JBoss 4.2和Geronimo 2都支持最新的JSF 1.2版本。JSF 1.2也可以在Tomcat 6上运行,但是发现了 一些问题。
1.5. 定制化插件支持
插 件支持是一种可以将新功能或特性引入到服务器中的架构。JBoss称它的插件开发特性为MBeans(被管理的Beans)。Geronimo也有被称为 GBeans的相似功能。这些定制的Beans提供了一套开发和管理定制资源的接口,而这些接口也可以作为插件组件被重用。
根据Jeff Genender所言,Geronimo使插件机制更进了一步:
使用Geronimo,你可以从许多组件中挑选一部分来建立符合需要的应用服务器栈。例如,如果想安装Liferay门户、或者Apache目录服务,你可以在管理控制台中添加URL并通过网络安装插件。插件管理系统可以检索出所有必须的依赖并且安装它们。
Geronimo也可以定制组件,Jeff总结如下:
它 具有使应用程序如你所愿的变成轻量级或者重量级的能力。你可以充分利用包括所有组件的Java EE 5栈,或者通过将Geronimo作为Web容器来使用少量的G,或者使用微型的G——它仅仅是Geronimo内核和一个完美的SOA和ESB解决方案 的基础。你可以添加和删除组件,来只提供自己想用的那部分。如果不需要EJB的话,你可以简单从控制台中删除组件。Red Hat的Chantal Yang表示:JBoss 4提供了“从微内核”组建应用服务器的好处。就像Yang所说,这使得JBoss能够以插件方式提供多种的组件来建立一个定制的应用服务器。
Yang还表示,JBoss 5和它的微容器将极大地提高MBeas的插件支持能力,还没有别的应用服务器在其核心具有这样一个改进的基于POJO的微容器。
1.6. 业务规则引擎支持
几乎每一种应用都是建立在一系列业务规则上的,这也称为业务逻辑。业务规则引擎可以使业务逻辑规划更容易管理。在大多数的规划中,基本逻辑就是必须的工作。业务规则引擎可以使你容易实现更加智能的逻辑。JBoss 4.2,Geronimo 2和Tomcat 6都支持 Drools, 它是一个流行的、标准兼容并且强大的业务规则引擎。虽然Geronimo是一个完全Java EE 5认证的服务器,并可以运行Drools,但是JBoss在编写本文时已经提供了三年的Drools支持,这使得JBoss的Drools是一个更加强大 的业务规则解决方案。JBoss公司最近已将Drools命名为 JBoss Rules。此Drools项目本身开始于2001年。
1.7. Hibernate 3.x支持
Hibernate为Java 语言提供对象关系映射(ORM)服务。其易于使用的框架允许你将面向对象的模型映射到传统的关系数据库中,这对于Java开发是一个有力的促进。简而言 之,Hibernate管理持久化,让你能够将POJO存储到几乎任何类型的SQL数据库中。并且在进行操作时,对你的程序来说那些对SQL数据的访问是 透明的,这使得应用数据和对象管理更加容易。
Hibernate是一个开放源码包,最初是由JBoss的Gavin King领导的小组所开发。现在运行在许多Java EE服务器上,并且也能与J2SE一起工作。JBoss 4.2,Geronimo 2和Tomcat 6都支持Hibernate 3。
1.8. JBoss Seam支持
JBoss Seam是一个强大的应用框架,它整合了许多Java和Web技术,包括Ajax(asynchronous JavaScript and XML)、JSF、EJB 3、Java Protlets和BMP(business-process management)。
Seam是JBoss的一个项目,所以JBoss自然支持它,同样Geronimo也支持。根据Seam的厂商所言,Seam应用可以运行在使用了JBoss可嵌入EJB 3容器的Tomcat上。
1.9. 集群支持
集群是 一个技术术语,它是多个并行运行的服务器,这些服务器提供相同服务、以求获得高可用性:因为通过服务器集群可以支持更多的客户,如果集群中的某个服务器崩 溃,其它的服务器可以继续为客户提供服务。在Java EE服务器案例中,即使在集群中的一台服务器崩溃,Java应用仍然可以使用。集群为企业级Java应用提供了可扩展性、提高了性能,并消除了单点故障。
JBoss 4.2,Geronimo 2和Tomcat 6都以某种方式支持集群。据Chantal Yang称,JBoss使用“通过伙伴复制和细粒复制以高性能和高可靠的集群层”。Geronimo最近发布了一个针对纠正Geronimo 2集群问题的补丁,所以在这点看来,Geronimo可能还要做一些测试。如果你对Geronimo的集群感兴趣,可以咨询Apache软件基金会。
1.10. Eclipse IDE支持
Eclipse 可以说是Java开发中最受欢迎的IDE,所以将它同你的Java EE服务器集成是培养良好开发的途径。JBoss、Geronimo和Tomcat都支持Eclipse集成。JBoss公司有自己版本的 Eclipse,被称作是Red Hat Developer Studio,在编写本文时还处于测试阶段。
2. 安装与部署
根 据测试,安装以上三种Java服务器都是非常容易的。除了将已下载的zip或者tar包解压,你所要做的就是设置JAVA_HOME环境变量指向Java 1.5的安装目录。在运行startup或者是shutdown脚本以启动或停止这些服务器之前,必须设置这个环境变量。注意在Linux/Unix系统 中,可能还需要使用chmod命令赋予这些脚本可执行权限。
2.1. 部署
当谈到通用配置和部署时,Geronimo 2是非常光彩夺目的。我发现通过它的Web控制台(见下面的图1)来配置和部署Java应用是一件轻而易举的事。正如Jeff Genender的解释:
Geronimo 控制台包含许多不同的向导以帮助使得应用服务器的配置尽可能简单。Geronimo包含的向导让你可以测试数据库连接池,安全领域等。你可以通过一个易于 使用的向导来取代过去编辑XML配置或停止和重新启动服务器的工作,数据库连接池向导甚至可以为你从网络上下载大部分的驱动,以使你无需去找适合数据库的 驱动。
Geronimo控制台也可以配置大多数内嵌在Tomcat 6容器中的特性,甚至不必接触到一个XML配置文件。
图 1. Geronimo Web 控制台(点击可放大图像)
JBoss 4.2也有一个外观漂亮的管理控制台(见图2),但它并不提供和类似于Geronimo的特性。它主要是提供JBoss状况和监控信息,但缺乏部署功能。 要部署一个应用程序,你可以简单的拷贝它到default/deploy目录中,然后它会被自动迅速的部署。当然,你可以在jboss- service.xml配置文件中指定自定义部署目录。
图 2. JBoss Web控制台(点击可放大图像)
Tomcat 6快速轻巧,正真形成一个轻量级的应用服务器。通过提供一个漂亮的Web控制台,它提供你所需要的基础功能(见图3)。你可以从基于Web的Tomcat 管理器中启动/停止和部署/卸载WAR应用。同时它还提供大部分有用的状态和监控信息。它也为Web控制台提供了一种良好的基础认证制度:你只需在 Tomcat服务器目录中的一个XML文件中简单的指定用户/密码。
图 3. Tomcat Web控制台(点击可放大图像)
3. 性能基准
随 着可靠性的提高,性能或许是应用服务器中最重要的一个特性。为了服务器的基本测试,我使用JSP页面和编译好的Servlet做了简单的测试,看看应用服 务器能处理多少用户应用会话、连接用户的速度有多快。真实世界中的Java应用非常广泛,而我对JSP和Servlet的测试却非常少量,因为我只要求测 试这些服务器的基本可扩展性、可靠性和速度。
通过使用双核64位CPU和4GB内存的服务器,我获得了三种服务器在运行于多达120万并发请求下的数据。这并不意味着同步连接,而是意味保持独一无二的、并发的、通过浏览器客户端连接的用户会话。如果我有更多的内存,我肯定可以获得超过120万的会话。
图4和图5显示了基准测试结果。
图 4. 启动大量的JSP会话
图 5. 一个检查会话的Servlet的大量命中
这 里,用于搜集这些基准数据的代码只有几百行。为了获得准确数据,我为每种服务器都使用了同样的配置。在真实世界的Java EE应用中,每一个会话都保持比这个测试更多的数据,因此你可能得不到我所得到的如此海量的数字,除非你在一台有八个处理器和足够多的内存的服务器上运 行。
JBoss 4.2和Geronimo表现得非常不同,主要是因为Geronimo版本更加新、并且使用了最新的内核。Tomcat 6是最好的,这是因为它是一个专门为JSP/Servlet服务的轻量级的服务器,而这些正是我测试的基准。Tomcat只需要3秒的启动时间,而 JBoss和Geronimo则需要大约20秒。
如果这些服务器使用完所有的内存,它们都将濒临崩溃。在JBoss 4.2中我曾经有一次Java空指针异常就试图关闭它的经历,即使它还没有使用完所有的内存。当用完所有内存时,Geronimo和Tomcat都似乎非常糟糕,此时关闭它们是非常困难的。
4. 结论
我 在商业Java应用服务器(如Sun的Java应用服务器和BEA的WebLogic)和开源替代品中都已经安装和部署了Java应用。在这篇文章中,根 据我的经验,与开源服务器相比,商业应用服务器有更多的Bug,并且它们更难安装。部署也是一个问题,至少在Sun的Java应用服务器的最新版是这样。
底线:JBoss,Geronimo和Tomcat是可靠、快速的,而且一定能够处理好在大型的企业级应用中的交易。此外,许多高需求的Java服务器技术特性来源于开源世界中,而不是商业世界中。
在这篇文章中,我在特性、部署和性能方面比较了三种流行的开源JEE应用服务器。这些特性的比较可以帮助你决定选择最适合应用环境需求的开源应用服务器,而性能基准测试能帮助你的考虑更加全面。
5. 作者自传
Jonathan Campbell是 一个项目主管,拥有至少15个IT认证。自20世纪80年代末以来,他一直在各种风格的UNIX系统上和自20世纪90年代以来在Windows系统上开 发软件。在网络工程和UNIX,Linux和WIndows平台的集成方面也有专门的知识。目前,他正在为各种企业和美国政府工作。
6. 关于译者
李功健,Matrix编辑。毕业于大连理工大学机械电子工程专业。熟悉Java和C++软件开发,熟悉Windows、Redhat Linux操作系统 和SQL Server、Oracle等数据库管理系统。也从事过一些实际项目的开发工作。目前正在攻读研究生。