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 应用程序方面并没有 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 添加了一些特定于 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。本文提供的样例应用程序重点介绍了这两种实现之间的主要区别。
衷心感谢 Ron Staerker 审校了本文。
学习
- 从 Tomcat 迁移到 Geronimo 的最佳实践
- WebSphere Application Server Community Edition V2.1 中的新增功能
- 使用 WebSphere Application Server Community Edition 开发 JPA 应用程序
- Community Edition 支持站点
- WebSphere Application Server Community Edition 文档
- WebSphere
Application Server Community Edition 样例
- WebSphere
Application Server Community Edition 试用支持
- Apache Geronimo 站点
- 在所有 Java EE5 API 上开发应用程序
-
了解 Java EE 5
- Community Edition 中的集群功能
- Apache Geronimo 样例
-
WebSphere Application Server Community Edition Technical Support 产品
-
WebSphere 产品下载:在这里您可以找到 Websphere 产品的试用版下载,让您可以提前体验到它们的功能和新特性。
-
WebSphere Application Server Community Edition 资源
-
WebSphere
Application Server Community Edition developerWorks 空间
- developerWorks Open Source 专区
获得产品和技术
讨论
