WebSphere 迁移: 将应用程序从 JOnAS 迁移到 WAS Community Editio
资料简介:
引言
最初基于 Apache Geronimo 的 IBM WebSphere Application Server Community Edition(即开源 Java™ 2, Enterprise Edition (J2EE™) 应用程序服务器)在 2005 年底被引入 WebSphere Application Server 产品系列。其内存占用小的特性、易用性及灵活的可用性使其非常有助于中小型企业利用 J2EE 编程模型和运行时环境。
JOnAS(Java开放应用程序服务器)是一种由 ObjectWeb 公司生产的开源应用程序服务器产品,该公司在欧共体占有主要地位。该产品平台与 J2EE 兼容,并且已通过 Sun™ 公司的 J2EE 1.4 Certification Test Suite 的测试。JOnAS 支持用于运行 Web 应用程序的 Web 容器层的 Tomcat 和 Jetty。
鉴于 WebSphere Application Server 和开源社区的服务与基础结构的支持,WebSphere Application Server Community Edition(以下称为 Community Edition)是 JOnAS 及其他开源应用程序服务器的绝佳备选方案。虽然将应用程序从 JOnAS 迁移到 Community Edition 相对比较简单,但像所有迁移一样,仍会出现复杂的情况。本文讨论将应用程序从 JOnAS 迁移到 Community Edition 时可能会遇到的一些问题。
有关有助于从 JBoss、WebLogic 及其他平台迁移到 Community Edition 的文章,请参见参考资料。
最初基于 Apache Geronimo 的 IBM WebSphere Application Server Community Edition(即开源 Java™ 2, Enterprise Edition (J2EE™) 应用程序服务器)在 2005 年底被引入 WebSphere Application Server 产品系列。其内存占用小的特性、易用性及灵活的可用性使其非常有助于中小型企业利用 J2EE 编程模型和运行时环境。
JOnAS(Java开放应用程序服务器)是一种由 ObjectWeb 公司生产的开源应用程序服务器产品,该公司在欧共体占有主要地位。该产品平台与 J2EE 兼容,并且已通过 Sun™ 公司的 J2EE 1.4 Certification Test Suite 的测试。JOnAS 支持用于运行 Web 应用程序的 Web 容器层的 Tomcat 和 Jetty。
鉴于 WebSphere Application Server 和开源社区的服务与基础结构的支持,WebSphere Application Server Community Edition(以下称为 Community Edition)是 JOnAS 及其他开源应用程序服务器的绝佳备选方案。虽然将应用程序从 JOnAS 迁移到 Community Edition 相对比较简单,但像所有迁移一样,仍会出现复杂的情况。本文讨论将应用程序从 JOnAS 迁移到 Community Edition 时可能会遇到的一些问题。
有关有助于从 JBoss、WebLogic 及其他平台迁移到 Community Edition 的文章,请参见参考资料。
2008-04-02
浏览4134
下载0
已下载用户的评价
您还未下载该资料,不能发表评价;
查看我的 待评价资源
查看我的 待评价资源
南方雨
没用
[b]清单 4. web.xml [/b][table=98%][tr][td]HelloJonasWeb HelloServlet HelloServlet HelloServlet InfoServlet InfoServlet InfoServlet TestLocal TestLocal TestLocal TestRemote TestRemote TestRemote Lookup Lookup Lookup HelloServlet /HelloServlet InfoServlet /InfoServlet TestLocal /TestLocal TestRemote /TestRemote Lookup /Lookup index.html index.htm index.jsp default.html default.htm default.jsp ejb/SessionReference Session ejbs.SessionHome ejbs.Session HelloJonasEJB.jar#Session ejb/SessionLocalReference Session ejbs.SessionLocalHome ejbs.SessionLocal HelloJonasEJB.jar#Session jdbc/dsreference javax.sql.DataSource Container Shareable [/td][/tr][/table]
[b]清单 5. jonas-web.xml[/b]
[table=98%][tr][td] jdbc/dsreference jdbc_1 [/td][/tr][/table]
[b]清单 6. geronimo-web.xml[/b]
[table=98%][tr][td] /HelloJonasWeb false jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
[b]清单 7. ejb-jar.xml[/b]
[table=98%][tr][td] HelloJonasEJB Session ejbs.SessionHome ejbs.Session ejbs.SessionLocalHome ejbs.SessionLocal ejbs.SessionBean Stateless Container jdbc/dsreference javax.sql.DataSource Container Shareable [/td][/tr][/table]
[b]清单 8. jonas-ejb-jar.xml[/b]
[table=98%][tr][td] Session ejb/ejbs/SessionHome jdbc/dsreference jdbc_1 [/td][/tr][/table]
[b]清单 9. openejb-jar.xml[/b]
[table=98%][tr][td] ?xml version="1.0" encoding="UTF-8"?> Session ejb/ejbs/SessionHome jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
结束语
本文简要介绍了 WebSphere Application Server Community Edition 和 JOnAS 之间的实现差异,有助于迁移到 Community Edition 并将其用作跳板,从而使用 WebSphere Application Server 系列产品。
[b]清单 4. web.xml [/b][table=98%][tr][td]
南方雨
没用
示例应用程序 本文中包括的示例应用程序是所有上述构造的工作示例,该示例应用程序还包括两个环境的部署描述符。应用程序由单个 WAR 模块和单个 EJB 模块组成。每个模块的内容为: 应用程序:[b]HelloJonasWeb[/b] [list][*]Simple.jsp——基本 JSP,输出两个语句,分别通过 HTML 和 PrintWriter 进行输出。[*]HelloServlet——标准 HelloWorld Servlet。[*]InfoServlet——演示 Servlet 接口的各种 API。[*]TestLocal——通过查找 EJB 引用来调用会话 Bean 本地接口。[*]TestRemote——通过查找 EJB 引用来调用会话 Bean 远程接口。[*]Lookup——查找数据源引用,然后调用会话 Bean 来查找同一引用。(请注意 JOnAS 注释掉的代码,该代码使用全局 JNDI 名称进行查找。)[/list]应用程序:[b]HelloJonasEJB[/b] [list][*]Session——无状态会话 Bean,具有三个方法。[list][*]ping()——将消息输出到服务器日志中。[*]echo()——将消息输出到服务器日志中,并将该消息返回给调用方。[*]lookup()——查找数据源引用。(请注意 JOnAS 的注释掉的代码,该代码使用全局 JNDI 名称进行查找。)[/list][/list]部署描述符 为了能够进行直观的比较,Hello.Jonas.ear 应用程序内包括的部署描述符如下所示: [list][*]将在适用情况下显示 J2EE、Community Edition 和 JOnAS 的部署描述符。[*]对于 EAR 结构,将显示 application.xml 和 geronimo-application.xml 文件。[*]对于 WAR 结构,将显示 web.xml、jonas-web.xml 和 geronimo-web.xml 文件。[*]对于 EJB 模块,将显示 ejb-jar.xml、jonas-ejb-jar.xml 和 openejb-jar.xml 文件。[/list] [b]清单 2. application.xml[/b] [table=98%][tr][td] HelloJonas HelloJonasEJB.jar HelloJonasWeb.war HelloJonasWeb [/td][/tr][/table]
[b]清单 3. geronimo-application.xml[/b]
[table=98%][tr][td] HelloJonas HelloJonasApp 1.0 car HelloJonasWeb.war HelloJonas HelloJonasWeb 1.0 war HelloJonas MyDataSourceDB2 /HelloJonasWeb jdbc/dsreference jdbc/MyDataSourceDB2 HelloJonasEJB.jar HelloJonas HelloJonasEJB 1.0 car HelloJonas MyDataSourceDB2 Session ejb/ejbs/SessionHome jdbc/dsreference jdbc/MyDataSourceDB2 [/td][/tr][/table]
示例应用程序 本文中包括的示例应用程序是所有上述构造的工作示例,该示例应用程序还包括两个环境的部署描述符。应用程序由单个 WAR 模块和单个 EJB 模块组成。每个模块的内容为: 应用程序:[b]HelloJonasWeb[/b] [list][*]Simple.jsp——基本 JSP,输出两个语句,分别通过 HTML 和 PrintWriter 进行输出。[*]HelloServlet——标准 HelloWorld Servlet。[*]InfoServlet——演示 Servlet 接口的各种 API。[*]TestLocal——通过查找 EJB 引用来调用会话 Bean 本地接口。[*]TestRemote——通过查找 EJB 引用来调用会话 Bean 远程接口。[*]Lookup——查找数据源引用,然后调用会话 Bean 来查找同一引用。(请注意 JOnAS 注释掉的代码,该代码使用全局 JNDI 名称进行查找。)[/list]应用程序:[b]HelloJonasEJB[/b] [list][*]Session——无状态会话 Bean,具有三个方法。[list][*]ping()——将消息输出到服务器日志中。[*]echo()——将消息输出到服务器日志中,并将该消息返回给调用方。[*]lookup()——查找数据源引用。(请注意 JOnAS 的注释掉的代码,该代码使用全局 JNDI 名称进行查找。)[/list][/list]部署描述符 为了能够进行直观的比较,Hello.Jonas.ear 应用程序内包括的部署描述符如下所示: [list][*]将在适用情况下显示 J2EE、Community Edition 和 JOnAS 的部署描述符。[*]对于 EAR 结构,将显示 application.xml 和 geronimo-application.xml 文件。[*]对于 WAR 结构,将显示 web.xml、jonas-web.xml 和 geronimo-web.xml 文件。[*]对于 EJB 模块,将显示 ejb-jar.xml、jonas-ejb-jar.xml 和 openejb-jar.xml 文件。[/list] [b]清单 2. application.xml[/b] [table=98%][tr][td]
南方雨
没用
[b][font=Arial]引用映射[/font][/b] 将各种类型的引用映射到目标对象的全局 JNDI 名称是一项常见的迁移任务。[b]引用[/b]是应用程序的特定指针,该指针指向通常存在于更大的上下文(如服务器或集群)中并且供多方使用的对象。当对象具有全局名称时,使用该资源的每个实体可以使用应用程序的特定名称,该名称即为引用。可以在部署时指定该指针的名称,并不需要重新构建应用程序。两个最常见的引用类型为 EJB 引用和指向 JDBC 数据源的[color=#5c81a7]资源引用[/color]。 [b]EJB 引用[/b]可在 WAR 模块中定义,以供 JSP 和 Servlet 使用。EJB 引用还可以在 EJB 模块中定义,以进行EJB 到 EJB 的交互,例如,会话 Bean 调用实体 Bean。J2EE 规范已处理此类型引用的映射,Community Edition 和 JOnAS 都遵循该定义。因此,并不需要实施进一步的操作以处理 EJB 引用,web.xml 和 ejb-jar.xml 文件将包含所有的必要信息,并且无需进行更改。本地和远程 EJB 引用都是这样的情况。 清单 1 显示了 web.xml 的相关片段。 [b]清单 1 [/b][table=98%][tr][td] ejb/SessionReference Session ejbs.SessionHome ejbs.Session HelloJonasEJB.jar#Session ejb/SessionLocalReference Session ejbs.SessionLocalHome ejbs.SessionLocal HelloJonasEJB.jar#Session [/td][/tr][/table]
[b][font=Arial]资源引用[/font][/b]
[b]资源引用[/b]的实现略有不同,需要进行小部分额外工作。J2EE 规范需要应用程序服务器来实现对资源引用的支持,但并不规定用于将引用映射到目标对象的机制。因此,映射信息通常在供应商的特定部署描述符(如 jonas-web.xml 和 geronimo-web.xml)中定义。
以下是 jonas-web.xml 文件的片段:
[table=98%][tr][td] jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
geronimo-web.xml 的等效片段为:
[table=98%][tr][td] jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
只有在文件中定义了关联的命名空间才可以使用以上命名前缀,如下所示:[font=NSimsun]xmlns:naming=http://geronimo.apache.org/xml/ns/naming-1.0[/font]。并不要求使用前缀,在此仅用于举例说明。完全可接受以下代码:
[table=98%][tr][td] jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
对于 Community Edition,可以在 geronimo-application.xml 文件的 Web 模块定义中存储该信息,并且会覆盖模块的特定 geronimo-web.xml 文件中的任何内容。对于 EJB 模块上定义的资源引用,XML 将非常相似。jonas-ejb-jar.xml 中有关资源引用的代码可能为:
[table=98%][tr][td] jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
openejb-jar.xml 内的等效 XML 为:
[table=98%][tr][td] jdbc/dsreference jdbc/MyDatasourceDB2 [/td][/tr][/table]
对于 Community Edition,可以在 geronimo-application.xml 文件的 EJB 模块定义中存储该信息,并且会覆盖模块的特定 openejb-jar.xml 文件中的任何内容。
[b][font=Arial]EJB JNDI 名称[/font][/b]
Enterprise Java Bean 根据 J2EE 规范的要求部署时在 JNDI 中注册一个名称。如果已存储该信息,并且 ejb-jar.xml 格式并不含有针对 Bean 的 JNDI 名称的特定字段,则该规范不会作此定义。因此,该值会在供应商的特定部署描述符中定义。在我们的示例中,对于 JOnAS,该部署描述符为 jonas-ejb-jar.xml;对于 Community Edition,则为 openejb-jar.xml。
以下是 jonas-ejb-jar.xml 文件的片段:
[table=98%][tr][td] Session ejb/ejbs/SessionHome [/td][/tr][/table]
以下是 openejb-jar.xml 中的等效片段:
[table=98%][tr][td] Session ejb/ejbs/SessionHome [/td][/tr][/table]
对于 Community Edition,可以在 geronimo-application.xml 文件的 EJB 模块定义中存储该信息,并且会覆盖模块的特定 openejb-jar.xml 文件中的任何内容。
[b][font=Arial]引用映射[/font][/b] 将各种类型的引用映射到目标对象的全局 JNDI 名称是一项常见的迁移任务。[b]引用[/b]是应用程序的特定指针,该指针指向通常存在于更大的上下文(如服务器或集群)中并且供多方使用的对象。当对象具有全局名称时,使用该资源的每个实体可以使用应用程序的特定名称,该名称即为引用。可以在部署时指定该指针的名称,并不需要重新构建应用程序。两个最常见的引用类型为 EJB 引用和指向 JDBC 数据源的[color=#5c81a7]资源引用[/color]。 [b]EJB 引用[/b]可在 WAR 模块中定义,以供 JSP 和 Servlet 使用。EJB 引用还可以在 EJB 模块中定义,以进行EJB 到 EJB 的交互,例如,会话 Bean 调用实体 Bean。J2EE 规范已处理此类型引用的映射,Community Edition 和 JOnAS 都遵循该定义。因此,并不需要实施进一步的操作以处理 EJB 引用,web.xml 和 ejb-jar.xml 文件将包含所有的必要信息,并且无需进行更改。本地和远程 EJB 引用都是这样的情况。 清单 1 显示了 web.xml 的相关片段。 [b]清单 1 [/b][table=98%][tr][td]
南方雨
没用
表 1. 部署描述符关系 [table=98%][tr][td]文件类型[/td][td]J2EE[/td][td]Community Edition[/td][td]JOnAS[/td][/tr][tr][td]EAR[/td][td]application.xml[/td][td]geronimo-application.xml[/td][td]--[/td][/tr][tr][td]WAR[/td][td]web.xml[/td][td]geronimo-web.xml[/td][td]jonas-web.xml[/td][/tr][tr][td]EJB[/td][td]ejb-jar.xml[/td][td]openejb-jar.xml[/td][td]jonas-ejb-jar.xml[/td][/tr][/table] 只要所支持的 J2EE 规范级别相同,J2EE 部署描述符无需更改就可以在应用程序服务器环境之间进行迁移。本文假设是这样的情况。 需要将平台(供应商)特定的部署描述符从一种格式转换为另一种格式,在本例中,从 JOnAS 格式转换为 Community Edition 格式。接下来的几部分将详细描述在此迁移方案中一些更常用的功能的转换: 引用映射 资源引用 EJB JNDI 名称 [[i] 本帖最后由 南方雨 于 2008-4-2 09:57 编辑 [/i]]
表 1. 部署描述符关系 [table=98%][tr][td]文件类型[/td][td]J2EE[/td][td]Community Edition[/td][td]JOnAS[/td][/tr][tr][td]EAR[/td][td]application.xml[/td][td]geronimo-application.xml[/td][td]--[/td][/tr][tr][td]WAR[/td][td]web.xml[/td][td]geronimo-web.xml[/td][td]jonas-web.xml[/td][/tr][tr][td]EJB[/td][td]ejb-jar.xml[/td][td]openejb-jar.xml[/td][td]jonas-ejb-jar.xml[/td][/tr][/table] 只要所支持的 J2EE 规范级别相同,J2EE 部署描述符无需更改就可以在应用程序服务器环境之间进行迁移。本文假设是这样的情况。 需要将平台(供应商)特定的部署描述符从一种格式转换为另一种格式,在本例中,从 JOnAS 格式转换为 Community Edition 格式。接下来的几部分将详细描述在此迁移方案中一些更常用的功能的转换: 引用映射 资源引用 EJB JNDI 名称 [[i] 本帖最后由 南方雨 于 2008-4-2 09:57 编辑 [/i]]
南方雨
没用
如果应用程序符合以下要求,则其迁移过程就非常简单: 严格遵循 J2EE 规范。 不利用任何具有供应商特定的实现的 J2EE 组件。 不利用任何供应商特定的 J2EE 规范以外的功能。 如果符合以上三种情况,则只需要使用目标平台的部署方法对应用程序进行部署。对于其他应用程序,其额外工作的多少视与这些条件的偏差程度而定。 JOnAS 和 Community Edition 环境的主要 Web 容器实现均基于 Apache Tomcat。这极大地简化了 WAR 迁移过程。Community Edition Web 容器基于 Tomcat 5.5.x 核心引擎,并支持 Servlet 2.4 和 JSP 1.2 规范。如果在具有不同核心规范级别的引擎之间进行迁移,则会稍微复杂一些,这种情况在所有环境都会出现,并且不是平台特定的条件。(有关其他迁移文章,请参见参考资料。)
如果应用程序符合以下要求,则其迁移过程就非常简单: 严格遵循 J2EE 规范。 不利用任何具有供应商特定的实现的 J2EE 组件。 不利用任何供应商特定的 J2EE 规范以外的功能。 如果符合以上三种情况,则只需要使用目标平台的部署方法对应用程序进行部署。对于其他应用程序,其额外工作的多少视与这些条件的偏差程度而定。 JOnAS 和 Community Edition 环境的主要 Web 容器实现均基于 Apache Tomcat。这极大地简化了 WAR 迁移过程。Community Edition Web 容器基于 Tomcat 5.5.x 核心引擎,并支持 Servlet 2.4 和 JSP 1.2 规范。如果在具有不同核心规范级别的引擎之间进行迁移,则会稍微复杂一些,这种情况在所有环境都会出现,并且不是平台特定的条件。(有关其他迁移文章,请参见参考资料。)