相关读书笔记、心得文章列表

<script src="http://blog.csdn.net/js/LoadFeedbackCount.js" type="text/javascript"> </script> 目录

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企业特性比较
      表 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应用服务器。这些特性的比较可以帮助你决定选择最适合应用环境需求的开源应用服务器,而性能基准测试能帮助你的考虑更加全面。

JBoss,Geronimo还是Tomcat? ——三种开源Java应用服务器的比较相关推荐

  1. Tomcat三种模式及配置APR模式

    为什么80%的码农都做不了架构师?>>>    Tomcat三种模式 Tomcat Connector的三种不同的运行模式性能相差很大,有人测试过的结果如下: 这三种模式的不同之处如 ...

  2. java 三种错误类型 区别_请列举至少三种在java语言中发生“严重错误”的情况...

    [简答题]自已编写一个自定义非整数异常类,来处理一个异常 [填空题]捕获异常时,可以把catch捕获的异常对象( ),使上层try-catch结构继续处理该异常事件;也可以把异常对象转换为其它异常对象 ...

  3. 【零基础学Java】—this关键字的三种用法+Java继承的三个特点(二十一)

    [零基础学Java]-this关键字的三种用法+Java继承的三个特点(二十一) 一.this关键字的三种用法 在本类的成员方法中,访问本类的成员变量 在本类的成员方法中,访问本类的另一个成员方法 在 ...

  4. 求一个数的二进制中有多少了 1 的三种算法 ——Java篇

    求一个数的二进制中有多少了 1 的三种算法 --Java篇 文章目录 求一个数的二进制中有多少了 1 的三种算法 --Java篇 算法一:通过取模 % 运算就取出每一比特位数值,再判断 思路: 代码: ...

  5. 文件上传的三种方式-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  6. 插入排序的三种算法(Java代码实现)

    目录 插入排序: 基本思想: 1:直接插入排序: 基本思想: 过程: 2:折半插入排序: 基本思想: 过程: 3:希尔排序: 基本思想: 过程: 插入排序: 基本思想: 每一趟将一个待排序的数,按照它 ...

  7. 三种开源库实现GIS坐标转换

    1 Proj.4 通过坐标系proj4字符串创建projPJ类型坐标系,调用pj_transform函数实现. 其中坐标系proj4字符串可在PROJ4-data文件夹中的epsg文件中搜索得到. d ...

  8. java集合框架支持三种类型,Java集合框架(一)

    集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference) 集合类型主要有3种:set(集).lis ...

  9. tomcat tomcat配置 项目部署tomcat三种方式

    一.tomcat概述 服务器的简单分类: 1.http服务器  主要用来专门处理静态页面. 2.JavaWeb服务器(轻量级别服务器)   最典型的是tomcat服务器,仅仅实现了JAVAEE13种规 ...

最新文章

  1. 处理linux 下nbu只能找到一个驱动器
  2. 3个可以写进简历的京东AI NLP项目实战,走完这五步就是Top算法工程师
  3. linux lpte_linux常用命令
  4. navigationController的NavigationBar和ToolBar的POP或PUSH消失问题
  5. Bumblebee微服务网关之访问日志处理
  6. WPF 蒙罩层 LoadingPage
  7. redis 缓存 @class: 会有 $hibernateproxy_微信亿级在线点赞系统,用Redis如何实现?
  8. 工作于内存和文件之间的页缓存, Page Cache, the Affair Between Memory and Files
  9. 模仿vue自己动手写响应式框架( - v-for
  10. android 广告close,小程序广告弹出与关闭
  11. 连接池配置oracle aix,一次AIX系统swap使用过高的故障解决过程
  12. jQuery Mobile中可折叠块collapsed的data-*选项
  13. WinForm如何输出中文星期几?
  14. 云瓣影音网站微信端(已开源)
  15. 孙燕姿 -《Stefanie》
  16. 解决EPSON LQ-630k打印机打印方向相反的问题(预览正常打印就不行)
  17. 动作捕捉用于索并联机构中的理论验证
  18. 大数据文本相似去重方案
  19. ChatGPT讲故事,DALLE-2负责画出来!两大AI合作出绘本!
  20. 如何下载酷6、土豆、优酷、56视频并转化格式进行播

热门文章

  1. 抖音热门表白代码bat
  2. 三相三线制逆变器的dq解耦控制
  3. 富祥二元期权60秒交易常用技巧
  4. 【Houdini】Houdini实现Realflow大脑袋案例
  5. ueditor1.4.3jsp版成功上传图片后却回显不出来与在线管理显示不出图片的解决方案
  6. Project 2013 任务开始时间以及工期 不能自动更新
  7. 记与埃森哲激战的那些天
  8. Android保活方案
  9. android wifi 验证失败怎么办,手机连接wifi身份验证失败怎么回事【图】
  10. 退休金只有1千多元,应该怎么生活?