WebSphere 迁移: 从 JBoss v4.x 迁移到 IBM WebSphere Application Server Community Edition v2.x

将 WebSphere® Application Server 和 Apache Geronimo 的支持和架构作为 JBoss® Application Server 的最佳替代选择。本文帮助您将运行在 JBoss 上的应用程序迁移到 WebSphere Application Server Community Edition。

Ashish Jain, 软件工程师, IBM

作者照片Ashish Jain 是 IBM WebSphere Application Server Community Edition 的 Level 3 Technical Support 的一位软件工程师。他获得了 NITK Surathkal 的计算机科学工程学士学位,并于 2005 年作为 ELTP 加入 IBM。



2009 年 12 月 09 日

简介

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 的架构图
显示 Community Editiona 的架构
图 2. JBoss Application Server 的架构图
显示 JBoss 的架构

表 1 展示了 JBoss Application Server 和 Community Edition 在架构方面的异同:

表 1. JBoss 和 Community Edition 特性对比
特性JBossCommunity 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 Application Server 迁移并部署到 WebSphere Application Server Community Edition。本文提供的样例应用程序重点介绍了这两种实现之间的主要区别。

致谢

衷心感谢 Ron Staerker 审校了本文。

参考资料

学习

获得产品和技术

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere, Open source
ArticleID=453753
ArticleTitle=WebSphere 迁移: 从 JBoss v4.x 迁移到 IBM WebSphere Application Server Community Edition v2.x
publish-date=12092009