WebSphere 遷移: 從 JBoss v4.x 遷移到 IBM WebSphere Application Server Community Edition v2.x
簡介
Java Enterprise Edition 5(Java™ EE5™)是面向開發和運行分布式、多層 Java 應用程序的編程平台。已開發的應用程序運行在其中一個 Java EE 容器上。兩個容器實現相同的規范,因此可以無縫地將針對一個應用服務器開發的應用程序遷移到另一個應用服務器。然而,由於類加載器機制、應用程序打包方式、本機代碼的使用以及部署計劃等方面存在差異,這一過程並非一帆風順。
在本文中,我們將介紹兩種應用服務器及其架構方面的異同。遷移文章 一節介紹將針對 JBoss Application Server 開發的應用程序遷移到 WebSphere Application Server Community Edition(此後簡稱為 Community Edition)所涉及的步驟。首先,我們將從較高的層面介紹這兩種應用服務器。
JBoss 應用服務器是 Java Enterprise Edition 5 (Java EE5) 兼容應用服務器,用於應用程序開發、測試和部署,由 Red Hat 創建。注意,到目前為止,JBoss v5 一直在 jboss.org 上發布,但是 RedHat JBoss v5 尚未完整發行。JBoss v5 的遷移應該是類似的。
Community Edition 是 Java Enterprise Edition 5 (Java EE5) 認證的基於 Apache Geronimo 的應用服務器。它經過預打包,包含以下開源組件(僅列舉其中一部分):
Apache Derby,用作默認的數據庫服務器
Apache OpenJPA,用作持久化引擎
Apache OpenEJB,用作 EJB 容器
Apache Tomcat,用作 Web 容器
Active MQ,用作消息傳遞提供者
Geronimo 內核是 Geronimo 的核心,它充當粘合劑的作用,可以插入任何開源組件。
Community Edition 的一些高級特性包括:
Java 支持 - IBM 和 Sun Java。
平台支持 - SUSE、Ubuntu、Red Hat 和 Asianux Linux、AIX、Sun Solaris、Windows XP、2003、2008 和 Vista。
數據庫支持 - Apache Derby、IBM DB2、IBM Informix、MySQL、Oracle 和 Microsoft SQL Server(任何 JDBC 兼容的數據庫都可以使用)。
消息傳遞支持 - Apache ActiveMQ、WebSphere MQ。
目錄服務器支持 - Apache Directory Server、IBM Tivoli Directory Server、Microsoft Active Directory Server、Open LDAP Server 和 Sun One Directory Server。
內存占用少 - 可以很輕松地開始使用 Community Edition —— 下載只占用約 100 MB,因此開發人員可以輕松下載和使用它。Community Editions 的輕巧性也意味著它可以很容易地嵌入到更大的堆棧中,這可以幫助客戶和 ISV 使用 Community Edition 構建完整的解決方案。
集中式配置和控制 - Community Edition 通過管理控制台提供了監控支持。使用這一特性,您可以對多台服務器收集統計數據和性能數據,並以圖形化方式將它們顯示給用戶。
面向 WebSphere Application Server 家族的可移植性 - 您對 WebSphere Application Server Community Edition 的投資將隨時間而增值,因為開源社區將日益成熟並不斷創新。同樣,WebSphere Application Server Community Edition 使您能夠訪問完整的、可靠的 WebSphere 中間件產品組合。當您的需求隨時間增加時,IBM 可以通過 WebSphere Application Server 配置提供高級的功能,比如 SOA。
免費產品許可 - 免費用於開發、測試和部署。
30 天免費試用支持 - Community Edition 提供了 30 天免費試用支持,用戶因此可以感受 IBM 支持的優勢。
Eclipse 插件,用於應用程序開發、測試和部署。
開放論壇,可以回答您的所有問題。您可以在 IBM developerWorks 論壇提出任何有關 Community Edition 的疑問。
架構異同
下面的小節展示 Community Edition 和 JBoss Application Server 的架構圖。
圖 1. Community Edition 的架構圖
圖 2. JBoss Application Server 的架構圖
表 1 展示了 JBoss Application Server 和 Community Edition 在架構方面的異同:
表 1. JBoss 和 Community Edition 特性對比 特性 JBoss Community Edition Enterprise Java Beans (EJB) 支持 EJB 3.0 規范 支持 EJB 3.0 規范 Java Connector Architecture (JCA) 支持 JCA 1.5 規范 支持 JCA 1.5 規范 Java Servlets 支持 Servlets 2.5 規范 支持 Servlets 2.5 規范 Java Server Pages (JSP) 支持 JSP 2.1 規范 支持 JSP 2.1 規范 Java Server Faces (JSF) 支持 JSF 1.2 規范 支持 JSF 1.2 規范 事務 支持 XA,本地,無事務 支持 XA,本地,無事務 JTA 實現 通過 JBoss JTA 支持 JTA 通過 ObjectWeb JOTM 和 HOWL 提供事務支持 連接池和管理 JBossCX 框架 通過 Codehaus TranQL 定制 Geronimo 代碼 WebContainer Apache Tomcat 6.0 Apache Tomcat 6.0.20 EJB 容器 JBoss 自有實現 Apache OpenEJB 持久性提供者 Hibernate Apache OpenJPA EJB 應用程序 Deployment Descriptor 在 jboss.xml 中配置 在 openejb-jar.xml 中配置 Web 應用程序部署描述符 在 jboss-web.xml 中配置 在 geronimo-web.xml 中配置 EAR 應用程序部署描述符 在 jboss-app.xml 中配置 在 geronimo-application.xml 中配置 JPA 部署描述符 在 persistence.xml 中配置 在 persistence.xml 中配置
常見遷移問題
本節介紹您可能會遇到的最常見遷移問題。
Java EE 實現差異
在遷移過程中,我們會遇到由於供應商在解釋 Java EE 規范方面的差異而引起的問題。比如,一些應用服務器在驗證 Java EE 應用程序方面並沒有 WebSphere 產品家族那樣嚴格,因此有時部署描述符就會無法通過驗證。另一個例子就是在 JSP 中使用單引號和雙引號在 WebSphere 產品家族編譯期間會出錯。
與類加載器相關的問題
Java 類加載器負責定位和加載類。應用服務器類加載器非常復雜,因此跟蹤和解決這些問題也變得十分困難。每個 Java EE 應用服務器都使用類加載器的定制實現,由於 Java EE 規范目前並未覆蓋類加載器。例如,Community Edition 具有一個父-子類加載器結構,而 JBoss 使用一種統一的類加載器方法。
共享庫
這些庫可以用於多個應用程序或整個服務器。共享庫位於不同的位置,並且其配置也因服務器而異。例如,在 Community Edition 中,可以有幾種方法來配置共享庫:
在應用服務器目錄中,向部署計劃添加對共享庫的依賴關系。
在應用服務器目錄的外部,向部署計劃添加 GBean。
在 JBoss 中,在特定於 JBoss 的部署計劃中為庫目錄添加一個條目。
綁定庫
每個平台都捆綁了一組獨特的框架和庫,例如,Apache Xerces 和 Apache Xalan。這些庫的版本和類加載器對於每個平台都是不同的。
部署描述符
Java EE 規范並沒有涵蓋應用程序部署和配置的所有方面。這就是我們使用特定於供應商的部署描述符的原因。每個應用服務器使用一組不同的文件集合;這是因為它們以不同的方式實現並具有不同的特性集。如表 1 所述,JBoss 使用的部署計劃的名稱與 Community Edition 使用的部署計劃的名稱不同。例如,JBoss 將其 Web 應用程序部署描述符命名為 jboss-web.xml,而 Community Edition 將其稱為 geronimo-web.xml。在用於驗證每個部署計劃的模式定義方面,可能還存在許多差異。
應用程序打包方式
打包方式對於移植和遷移十分重要。每個應用程序都使用不同的方式打包。這一點,再加上每個應用服務器中的不同類加載器實現,會為遷移帶來潛在的問題。要避免這些問題,應當始終遵循 Java EE 規范,其中包含了有關應用程序打包方式的規范。應用程序通常被打包到一個 EAR 文件,它可能由以下模塊組成:
EJB
包含 EJB 類文件和部署描述符。
WAR
包含部署描述符的 Web 應用程序模塊。
JAR
一個 JAR 文件,包含其他模塊和部署描述符用於 Java EE 應用程序客戶機的常用類。
RAR
Resource Adapter 歸檔是一個 JAR 文件,包含 J2C 架構的資源適配器。
使用本地代碼
Java 平台允許通過 Java Native Interface (JNI) 使用本機代碼,例如,使用 C 或 C++ 編寫的代碼。使用本機代碼會在遷移到不同操作系統時引發問題。例如,一個運行在 Windows 上的應用程序可能使用 .DLL 文件,而當您遷移到 Linux 平台時,同一個應用程序則會使用 .SO 文件。
JBoss Extensions
JBoss 添加了一些特定於 JBoss 的服務器擴展(JBoss Jars),以增強某些應用程序特性。這些擴展需要被解析為它們的 Java EE 規范。
遷移文章
下面這些文章中列出的遷移步驟可以幫助您理解本文討論的一些難題,並幫助您將 JBoss 應用程序遷移到 Community Edition。
JBoss to Geronimo - Servlets and JSPs Migration
JBoss to Geronimo - JDBC Migration
JBoss to Geronimo - Hibernate Migration
JBoss to Geronimo - EJB-Session Beans Migration
JBoss to Geronimo - EJB-BMP Migration
結束語
本文解釋了如何將代碼從 JBoss Application Server 遷移並部署到 WebSphere Application Server Community Edition。本文提供的樣例應用程序重點介紹了這兩種實現之間的主要區別。