JBoss,Geronimo還是Tomcat?

JBoss,Geronimo還是Tomcat?
——三種開源Java應用服務器的比較


作者:Jonathan Campbell

譯者:李功健

原文: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.2Geronimo 2Tomcat 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的特性比較
image

如果你的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 控制檯(點擊可放大圖像)
image

JBoss 4.2也有一個外觀漂亮的管理控制檯(見圖2),但它並不提供和類似於Geronimo的特性。它主要是提供JBoss狀況和監控信息,但缺乏部署功能。要部署一個應用程序,你可以簡單的拷貝它到default/deploy目錄中,然後它會被自動迅速的部署。當然,你可以在jboss- service.xml配置文件中指定自定義部署目錄。

圖 2. JBoss Web控制檯(點擊可放大圖像)
image

Tomcat 6快速輕巧,正真形成一個輕量級的應用服務器。通過提供一個漂亮的Web控制檯,它提供你所需要的基礎功能(見圖3)。你可以從基於Web的Tomcat 管理器中啓動/停止和部署/卸載WAR應用。同時它還提供大部分有用的狀態和監控信息。它也爲Web控制檯提供了一種良好的基礎認證制度:你只需在 Tomcat服務器目錄中的一個XML文件中簡單的指定用戶/密碼。

圖 3. Tomcat Web控制檯(點擊可放大圖像)
image

3. 性能基準

隨着可靠性的提高,性能或許是應用服務器中最重要的一個特性。爲了服務器的基本測試,我使用JSP頁面和編譯好的Servlet做了簡單的測試,看看應用服務器能處理多少用戶應用會話、連接用戶的速度有多快。真實世界中的Java應用非常廣泛,而我對JSP和Servlet的測試卻非常少量,因爲我只要求測試這些服務器的基本可擴展性、可靠性和速度。

通過使用雙核64位CPU和4GB內存的服務器,我獲得了三種服務器在運行於多達120萬併發請求下的數據。這並不意味着同步連接,而是意味保持獨一無二的、併發的、通過瀏覽器客戶端連接的用戶會話。如果我有更多的內存,我肯定可以獲得超過120萬的會話。

圖4和圖5顯示了基準測試結果。

圖 4. 啓動大量的JSP會話
image

圖 5. 一個檢查會話的Servlet的大量命中
image

這裏,用於蒐集這些基準數據的代碼只有幾百行。爲了獲得準確數據,我爲每種服務器都使用了同樣的配置。在真實世界的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等數據庫管理系統。也從事過一些實際項目的開發工作。目前正在攻讀研究生。
發佈了1 篇原創文章 · 獲贊 0 · 訪問量 8897
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章