在開源Java應用服務器領域,像JBoss、Tomcat及Apache的Geronimo,他們不僅僅是商 業領域的領跑者,同時是技術領域的先行者。當然,所有的Java EE應用服務器的實現不 盡相同,但其很多方面具有一定程度的可比性。本文對JBoss4.2、Geronimo 2及Tomcat 6 三種開源的Java EE應用服務器,就他們的特性、部署及性能等方面進行一一比較。
一、前言
當企業級的Java應用程序需要真正的應用部署時,Java EE應用服務器是必不可少的工 具。研究表明,除了商業的應用服務器之外,開源的Java EE應用服務器開始成為很多 Java企業級應用的最佳選擇。而JBoss、Tomcat及Apache的Geronimo是其中最主流的開源 Java EE應用服務器。而這三者中,盡管JBoss和Tomcat並非100%的實現了Java EE 5標准 ,但這二者占有的市場份額相對比較大。Geronimo是對Java EE 5標准100%的實現,正在 快速的發展。如果讀者想在Java EE領域找份像樣的工作,對這三種開源的應用服務器應 該達到比較熟悉的程度,並能在一定程度上進行比較區分。
在本文中,對這三種主流的應用服務器,就其特性、部署及性能等方面進行比較。分 析了他們各自的特色對該應用服務器的重要性,當然,也提供了一些如何選擇適合項目的 服務器的原則及建議。
二、特性比較
表1就JBoss 4.2、Tomcat 6及Geronimo 2的特性進行全面的比較。請注意,表中用到 的“部分支持”表述,表明該應用服務器並非完全的支持,需要安裝一些額外 包。而其中的“原則上支持”表述,表明該應用服務器需要第三方的安裝包的 支持。注:三種應用服務器均在Linux、Solaris、Windows及Mac OS X上進行過測試。
特性 JBoss 4.2 Geronimo 2 Tomcat 6 Java EE 5一致性 部分支持 完全支持 部分支持 支持EJB 3.0 支持 支持 原則上支持 JSP2.1和Servlet2.5 支持 支持 支持 JSF1.2 支持 支持 原則上支持 客戶化插件 支持 支持 不支持 業務規則引擎 原則上支持 原則上支持 原則上支持 Hibernate3.x 支持 原則上支持 原則上支持 集群 支持 支持 部分支持 Eclipse IDE 支持 支持 支持
表1.Java EE應用服務器特性比較
當讀者的應用需要比較特殊的擴展,或是想與Java EE 5最貼近時,那麼,Geronimo 2 是最佳的開源Java EE應用服務器選擇。盡管JBoss 4.2與Sun的Java EE標准在實現上有一 定的出入,但JBoss 4.2 team提供了許多與Java EE標准很符合的技術,同時也擴充了 Java EE 5的標准范圍。而Tomcat 6本身就是一種輕量級的解決方案,所以它不並包括 Java EE 5的所有特性,或是在JBoss及Geronimo中所提供的特性,但正是由於它的輕量級 ,才使它對內存的占有量比較少,並且比其它兩種服務器運行起來更快。
1.Java EE 5一致性
Sun公司的Java EE 5標准是一種行業標准,而作為這種標准的實現,開源的Java EE 5 應用服務器應該與其盡量的保持一致,因此Java EE 5的一致性是一個很重要的指標。在 這三種開源的實現中,Geronimo是實現得最好,與Java EE 5標准最貼近的應用服務器。 JBoss 4.2支持絕大部分Java EE 5的特性,當然,不久即將發布的JBoss 5將完全支持 Java EE 5的所有特性。而Tomcat一般看成是JSP/servlet的容器,僅僅支持Java應用服務 器的基本特性。
2.支持EJB3
EJB(Enterprise JavaBeans)是指能在Java EE服務器部署的Java組件。它通常將一 些業務功能打包成可重用的組件。新發布的EJB3提供了許多新功能,解決了舊版本中許多 問題。JBoss 4.2及Geronimo 2均支持EJB3。Tomcat 6本身並不支持EJB3,但Apache OpenEJB項目可以使Tomcat支持EJB3,據稱Tomcat可以運行一種嵌入式的JBoss EJB3容器
3.支持JSP 2.1/Servlet2.5
對JSP/servlet的支持是絕大部分Java服務器應提供的最基本功能。JSP2.1和 Servlet2.5是Java EE 5對JSP/servlet的升級功能。JBoss 4.2、Geronimo 2及Tomcat 6 均支持JSP/servlet這一特性。
4.支持JSF 1.2
JSF(Java Server Faces)是一種在Java EE應用部署的組件式架構。提供基本的Web 開發的用戶界面。與請求驅動的MVC(Model-View-Controller)的架構不同的是,JSF采 用了組件驅動的模式。就目前的JSF1.2而言,JBoss 4.2及Geronimo 2都有很好的支持, 而運行在Tomcat 6時有不少的問題待解決。
5.支持客戶化插件
客戶化插件支持,意味著可以在原有應用服務器功能的基礎上,開發新的功能,並能 很好的協同使用。在JBoss中使用MBeans(managed beans)來處理插件開發。而Geronimo 也采用類似的處理方式,只是名稱不一樣,叫GBeans。這些客戶的Beans為開發及部署客 戶資源時,提供一系列統一的接口。
6.支持業務規則引擎
幾乎所有的應用程序都是建立在一系列業務規則之上,或稱之為業務邏輯。而業務規 則引擎組件則能幫助管理與簡化業務邏輯編程。一般的編程過程中,程序員最常見的邏輯 有如if/then邏輯。而有了業務規則引擎,則可以實現許多更加智能的業務邏輯。Drools 作為一種業內很流行、標准化的業務規則引擎,在JBoss 4.2、Geronimo 2及Tomcat 6中 均可得到支持。Geronimo完全支持Drools,而JBoss支持Drools的歷史最久,已達三年之 久,並使JBoss/Drools成為了一種非常有市場競爭力的業務規則解決方案。
7.支持Hibernate 3.x
Hibernate為Java編程提供了強有力的關系/對象模型(ORM,Object-relational mapping)。Hibernate可以將面向對象的模型映射為關系型數據庫,這對Java開發來說是 最有吸引力的。Hibernate作為一種開源的軟件,最早就是由於JBoss的一個團隊所開發( Gavin King)。當然,JBoss 4.2、Geronimo 2及Tomcat 6均支持Hibernate 3。
8.支持JBoss Seam
JBoss Seam是一種著名的應用框架,集成了眾多的Java及Web技術,例如Ajax、JSF、 Java Portlets、BPM(Business-process management)等技術。Seam是JBoss的項目,理 所當然,JBoss 4.2自然支持它,同樣Geronimo 2也支持JBoss Seam。據JBoss Seam的開 發團隊稱,Tomcat可以通過使用JBoss嵌入式EJB 3容器來支持JBoss Seam。
9.支持集群
集群通過並行在多台服務器運行同樣的服務,從而大大的提高應用的吞吐量,達到所 謂的高負荷的效果。由於采用了數台服務器同時運行,所以當其中的某台服務暫時或死機 時,對客戶不會造成服務停止,從而達到業務的可持續。集群極大的提高了企業級的Java 應用的性能、吞吐量等能力。
JBoss 4.2、Geronimo 2及Tomcat 6均以同樣的方式來支持集群。JBoss在集群層使用 及時復制的方式來達到集群的目的。而Geronimo所發布的集群,還處於測試階段,需要時 間的考驗,如果有興趣,可以與Apache基金組織聯系。
10.支持Eclipse IDE
Eclipse是目前最流行的Java開發工具,自然,與Eclipse的集成是眾多Java EE 5應用 服務器應該提供的功能。JBoss、Geronimo及Tomcat均支持與Eclipse整合。特別地, JBoss還有自己的Eclipse版本,稱為Red Hat Developer Studio,目前正處於測試的階段 。利用Geronimo提供的工具,可以省去手工配置XML文件的煩瑣。同時,數據庫連接池工 具都可以自動的下載所需要的數據庫連接驅動。
三、部署
這三種應用服務器的安裝均十分簡單。在相關的網站上下載zip或tar包進行解壓,唯 一需要配置的是設置JAVA_HOME環境變量(不過一般均有配置)。注意,在Linux/Unix系 統下,需要先發送chmod命令。
1.Geronimo
對Geronimo 2來說,進行配置及部署Java應用程序非常的簡單,特別是通過它提供的 Web控制台更加簡單。Geronimo控制提供了許多簡單的功能來幫助開發人員進行應用程序 的配置。可以進行數據庫的連接池測試及安全設置或配置等。
2.JBoss
JBoss 4.2有非常漂亮的Web管理控制台,但它所提供的管理功能及特性與Geronimo不 盡相同。首先看到的是JBoss的狀態及其監測信息,但並沒有提供部署功能。而部署Java 應用時,只需要將它復制到default/deploy文件夾下面,JBoss會自動的檢測到它並進行 相關的快速部署。當然,也可以通過修改配置jboss-service.xml來進行客戶應用程序所 在目錄的映射。
圖2.JBoss控制台
3.Tomcat
Tomcat 6不愧為一款快速的輕量級的應用服務器。它的控制台提供了基本的部署功能 。可以通過Tomcat的控制台進行服務的啟動/停止及WAR包的deploy/undeploy操作。當然 也提供了Tomcat的運行狀態及監測信息,同時有很好的用戶授權系統。
圖3.Tomcat控制台
四、性能
就可靠性而言,性能應該是所以的應用服務器所應該提供的最重要的特性。在本文中 ,筆者做了一個小實驗,使用JSP頁面及編譯好的servlet來測試應用服務器所能處理的用 戶會話個數以及所能連接的用戶數量。當然,實際的Java應用是更加復雜的,而本實驗中 的JSP頁面及servlet是比較簡單的,主要用於測試Web應用服務器的穩定性、可靠性及速 度。
使用的測試機器為:雙核-64位 CPU,4G的內存,在實驗中,讓第一種應用服務器運行 到1200000個會話。當然,這些會話不並是同時連接。
圖4.多Session測試JSP頁面結果
圖5.多Session測試servlet結果
測試所用的代碼量只有區區的幾百行,為了准確起見,筆者對三種服務器使用了相同 之處的配置。當然,如果采用實際的Java應用程序來測試時,所得到的數據結果圖會有一 定的出入,但大概的趨勢會一致。
JBoss 4.2的表現不如Geronimo2,畢竟Geronimo 2所采用的實現技術及思想都是最新 的。正如圖所示,Tomcat 6的性能最好,因為Tomcat 6本身就是為JSP/servlet量身定做 的Java EE 5應用服務器。相比起JBoos或Geronimo需要20秒進行啟動的長時間,Tomcat僅 僅需要3秒鐘。
五、 小結
在本文中,筆者比較了主流的Java EE應用服務器的特性、部署及性能方面的內容,特 性方面的比較應該有利於讀者選擇更加適合自己項目的Java EE應用服務器,做到有目的 性的選擇服務器,從而達到適合的效果。
同時,筆者測試比較了商用或開源的Java應用服務器,發現商業的Java應用服務器不 一定比開源的好,反而在商業的應用服務器(如Sun的Java應用服務器或BEA的WebLogic) 中的Bug比開源的的應用服務器更多些。
JBoss、Geronimo及Tomcat是快速可靠的可用於處理部署大規模的Java企業級應用的服 務器。特別值得一提的是,很多的高性能Java服務器技術都是從這些開源的應用服務器中 總結與借鑒過來,而不是從那些商業的應用服務器中發展而來。