内容


WebSphere 迁移

将 Web 应用程序从 Apache Tomcat 迁移到 WebSphere Application Server Community Edition

Comments

系列内容:

此内容是该系列 # 部分中的第 # 部分: WebSphere 迁移

敬请期待该系列的后续内容。

此内容是该系列的一部分:WebSphere 迁移

敬请期待该系列的后续内容。

如果您已经使用 Apache Tomcat 5.x 承载 Web 应用程序,并希望作为一种健壮的且对开发人员友好的开发和生产环境来评估 IBM WebSphere Application Server Community Edition V1.0,则本文可以帮助您开始进行工作。

本文中的信息有助于您深入了解 Tomcat 5.5 应用程序服务器和 WebSphere Application Server Community Edition 之间的实现差异。本文使用示例应用程序来演示循序渐进的应用程序迁移过程,主要说明两个实现之间的某些明显差异。首先,您需要将该应用程序部署到 Tomcat 5.5,然后执行迁移步骤并部署到 WebSphere Application Server Community Edition(以下称为 Community Edition)。

本文由以下部分组成:

实现分析:Tomcat 和 Community Edition

将现有应用程序从一个供应商的服务器迁移到另一个供应商的服务器往往使人不堪重负。虽然有 J2EE 证书的担保,但是应用程序可能会使用供应商特定的功能和扩展,这一过程降低了应用程序资产在服务器之间的可移植性。然而,在 Tomcat 5.5 和 Community Edition 之间进行迁移时,不会出现这种问题。

您可以确信应用程序将在 Tomcat 5.5 和 Community Edition 1.0 之间平稳迁移的主要原因是:Tomcat 5.5 是 Community Edition V1.0 组的一部分,将 Tomcat 5.5 作为它的 Web 层容器进行了集成。因此,根本没有必要迁移到一个不同的 Web 层容器。图 1 演示了该 Tomcat 5.5 集成。

图 1. WebSphere Application Server Community Edition 中的 Tomcat 5.5 集成
WebSphere Application Server Community Edition 中的 Tomcat 5.5 集成
WebSphere Application Server Community Edition 中的 Tomcat 5.5 集成

在图 1 中可以看到,实际上您要使用与您已熟悉的 Tomcat 5.5 服务器完全相同的服务器;没有必要为 Community Edition 重新打包或重新配置 Tomcat 5.5 应用程序层资产。然而,在迁移应用程序时,您需要了解两者之间的差异。

存在这些差异的主要原因是:

  • Tomcat 5.5 如何集成到 Community Edition 容器;Community Edition 目前如何处理配置管理,
  • 并且功能齐全的 J2EE 1.4 服务器的资源现在可用于 Tomcat。

从本质上来说,您可以认为这是对 Tomcat 5.5 进行包装以用于一个更大的 J2EE 容器,同时向它提供容器服务,如内置 JNDI 支持、安全性、内置 EJB 支持、内置 JMS 代理和内置 RDBMS。

有了这种概念后,您将发现,要解决大多数与迁移有关的问题您需要做的所有事情就是如何或者在何处将等效的 Tomcat 5.5 的可配置功能映射到 Community Edition 容器中。找到这些映射后,Tomcat 5 容器的操作与正在使用的 Tomcat 5.5 服务器完全相同。在集成过程中,没有对 Tomcat 5.5 进行内部体系结构更改,只是对 Tomcat 5.5 进行包装并使其适合 Community Edition 容器。这确保了 Tomcat 服务器的更新版本(超过当前的 5.5 版本)可以在最短的可能时间集成到 Community Edition。

下表主要说明运行于单机版模式的 Tomcat 5.5 服务器和集成到 Community Edition 的服务器之间的一些明显差异。

表 1. Tomcat 5.5 和 Community Edition 1.0 功能比较
功能单机版 Tomcat 5.5WebSphere Application Server Community Edition 1.0
servlet 和 JSP使用相同的引擎处理 Servlet 2.4 和 JSP 1.2 组件。 对于核心引擎,与 Tomcat 5.5 没有区别。
多个连接器启用多个协议处理程序来访问相同的引擎。例如,HTTP 1.1 连接器可以在同一引擎上与 SSL 连接器一起工作。保留了该功能。Community Edition Web 控制台可用于配置要使用的连接器。
JNDI模拟 JNDI。通常您需要通过 server.xml 手动配置 JNDI 资源。JNDI 可以访问 Apache Geronimo 内核管理的 GBean 或对象引用。
领域Tomcat 中的领域是具有用户 ID 和密码信息的数据库。您可以通过 server.xml 或 context.xml 文件配置 Tomcat 中的领域。Community Edition 支持容器管理的安全领域,可以在整个容器中按照统一的方式使用容器管理的安全领域,以便对 Community Edition 应用程序组件进行身份验证和授权。
虚拟主机启用一个服务器来承载应用程序,以获得多个域名。您需要编辑 server.xml 来配置虚拟主机。支持 Tomcat 的这一功能。您可能需要编辑 j2ee-tomcat-plan.xml 并将它重新部署到服务器。
ValveValve 链可以与 Tomcat 组件相关联。您需要编辑 server.xml 或 context.xml。支持 Tomcat 的这一功能。您可能需要编辑 j2ee-tomcat-plan.xml 并将它重新部署到服务器。
JDBC 数据源可以配置为使用任何 JDBC 驱动程序。它还可以配置为将 Apache commons DBCP 用于合用 (pooling)。Community Edition 利用 JCA 1.5 支持和 TranQL 实现通过 JDBC 访问各种 RDBMS。可以使用基于 Web 的 GUI 控制台执行配置。

需要注意的重要一点是 Community Edition 中没有 server.xml 或 context.xml 文件。现在 Community Edition 容器要处理所有配置管理。不过您需要根据自己的特殊需求修改两个部署计划中的某一个:j2ee-tomcat-plan.xml 文件或 geronimo-web.xml。

下面介绍的示例应用程序将展示实际迁移过程中的一些修改。

关于示例应用程序

我们迁移的示例应用程序是使用 Web 层组件创建的 General Store 应用程序,Web 层组件包括:

  • JSP
  • servlet
  • JSP 标准标记库(JSP Standard Tag Library,JSTL)

该应用程序使用模型-视图-控制器(Model-View-Controller,MVC)的体系结构来路由请求,并且全部是无脚本(JSP 页面内没有嵌入式 Java 代码)的。

作为 Tomcat 5.5 应用程序,它还使用下面的 Tomcat 的特定功能:

  • 对用户进行身份验证的缺省的 Tomcat UserRealm。
  • 查找连接到外部 Derby 数据库的 JDBC 数据源的 JNDI。

图 2 演示了该应用程序的一般体系结构。

图 2. General Store 示例应用程序
General Store 示例应用程序
General Store 示例应用程序

在图 2 中,所有传入请求都被发送到控制器(MVC 体系结构)Servlet。该 Servlet 根据传入请求的参数将请求发送到两个 JSP 页面中的某一个页面。最初,请求被发送到显示产品目录的 generalstore.jsp。图 3 显示了 General Store 应用程序的产品目录页面。

图 3. 应用程序目录页面
应用程序目录页面
应用程序目录页面

当您单击某个 BUY 超链接时,控制器会将请求发送到 checkoutcart.jsp 页面,该页面使您能够将多个项添加到购物车,清除购物车,或返回到购物。

generalstore.jsp 和 checkoutcart.jsp 都大量使用 JSTL 生成交互式购物车脚本;没有使用嵌入式 Java 代码。

名为 GerneralStore 的类具有一个方法,通过该方法,可以获得目录以及每个目录中的产品列表。在生产场景中,该类的实现可以连接到外部 RDBMS 以获得它们的数据。在本例中,为了保持简单实现具有硬编码的目录和产品信息。

要通过 JDBC 访问外部 RDBMS,checkoutcart.jsp 页面使用 RDBMS 获取今天的促销消息并将该消息显示给购物者。

本文的下载 ZIP 文件提供了组成示例应用程序的文件。表 2 概括介绍了组成应用程序的类和文件,并描述了它们的用途。

表 2. General Store 示例应用程序中的文件
文件描述
generalstore.jsp向用户呈现目录。
checkoutcart.jsp向用户呈现购物车。将通过数据源(使用 JNDI 查找)访问 RDBMS 以显示促销消息。
generalstore.css两个 JSP 页面所使用的用来格式化 HTML 元素的样式表。
StoreController.java将请求发送到 JSP 的主控制器。还可以获得目录和产品信息,并将这些信息作为 JSP 的属性附加以进行显示。
GeneralStore.java包含返回应用程序所需的数据的方法。还包含实现自定义标记库的功能(请参阅 generalstore-taglib.tld)。
Category.java
Proudct.java
LineItem.java
当数据在应用程序的模型和视图之间传送时,JavaBean 用于保存值。
generalstore-taglib.tld实现为 GeneralStore.java 的方法的自定义标记库,这些方法用于 JSP。

要使用该示例应用程序,您必须下载以下应用程序并将它们安装到您的环境中:

部署到 Tomcat 5.5 环境

通过转到代码目录并键入下面的命令,您可以构建示例应用程序:

ant war

这将在 dist 目录中创建一个名为 generalstore.war 的 WAR 文件。它是可以部署到 Tomcat 5.5 的 Web 应用程序存档文件。

1. Tomcat 5.5 连接器配置

缺省情况下,Tomcat 5.5 服务器在端口 8080 侦听请求。这是通过 Tomcat 5.5 安装目录下的 conf/server.xml 配置的。清单 1 显示了配置连接器的 server.xml 代码段。

清单1.server.xml 中的 Tomcat 连接器配置

<Server port="8005" shutdown="SHUTDOWN">
  ...
  <!-- Define the Tomcat Stand-Alone Service -->
  <Service name="Catalina">
   ...
    <!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
    <Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" />

如果您需要更改端口,则执行以下操作:

  1. 关闭服务器。
  2. port="8080" 更改为上面的 server.xml 代码段中需要的端口。
  3. 再次启动服务器。

2. Tomcat 5.5 身份验证领域配置

在 Tomcat 中,领域维护用户、组和密码信息。缺省情况下,UserDatabaseRealm 在 Tomcat 5.5 中进行了配置,从而使您能够让用户在访问杂货店前对他们进行身份验证。此领域在 server.xml 文件中也进行了设置。清单 2 中的 server.xml 代码段的粗体行表示该身份验证领域的配置。

清单 2. server.xml 中的 Tomcat UserDatabaseRealm 配置

 <Server port="8005" shutdown="SHUTDOWN">
  ...
  <GlobalNamingResources>
     <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
       description="User database that can be updated and saved"
           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
          pathname="conf/tomcat-users.xml" />

  </GlobalNamingResources>
  ...
  <Service name="Catalina">
   ...
    <Engine name="Catalina" defaultHost="localhost">
    ...
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>
       ...

上面的配置对 UserDatabaseRealm 进行设置,以使用 conf/tomcat-users.xml 下面的文件维护用户、密码和角色信息。由于该领域是在 <Engine> 级配置的,因此它可以用于运行在 Tomcat 引擎上的所有主机。

要运行我们的应用程序,您不需要对 conf/server.xml 文件进行任何修改,因为缺省配置将为我们修改。然而,您需要对 conf/tomcat-users.xml 文件进行一些更改,其中 UserDatabaseRealm 保留所有用户信息。对 tomcat-users.xml 文件进行清单 3 中以粗体表示的更改。

清单 3. 在 tomcat-users.xml 中为 tomcat 用户添加管理和管理员角色

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat,manager,admin"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>

这分配tomcat 用户(密码为“tomcat”)角色为管理员和管理组的一部分。

在应用程序的 web.xml 文件中,存储的控制器受到保护,并且它只对具有 admin 角色的用户授予访问权限。清单 4 中的粗体行显示了保护应用程序的 web.xml 代码(在代码分配的 dd 目录中)。

清单 4. 对应用程序进行身份验证访问保护的 web.xml 部署描述符

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
    <description>
   IBM Community Edition 1.0 Example 
    </description>
    <display-name>IBM Community Edition 1.0 General Store Example
     </display-name>
   <servlet>
      <servlet-name>GeneralStore</servlet-name>
      <servlet-class>com.ibm.wasce.store.StoreController</servlet-class>
   </servlet>
   <servlet-mapping>
     <servlet-name>GeneralStore</servlet-name>
     <url-pattern>/store.cgi</url-pattern>
   </servlet-mapping>
   ...
   <security-constraint>
      <display-name>General Store Security Constraint</display-name>
      <web-resource-collection>
         <web-resource-name>Entire store</web-resource-name>
	   <url-pattern>*.cgi</url-pattern>
	 </web-resource-collection>
      <auth-constraint>
         <role-name>admin</role-name>
      </auth-constraint>
    </security-constraint>
    <login-config>
      <auth-method>BASIC</auth-method>
      <realm-name>Shopping Realm</realm-name>
    </login-config>
  <security-role>
      <role-name>admin</role-name>
    </security-role>
...
</web-app>

以上代码中的 <security-constraint> 和 <security-role> 元素是标准的 J2EE 安全性配置元素,并且在容器之间是可移植的。因此,未改变的 web.xml 稍后可以在 Community Edition 环境中工作。然而,您在 Tomcat 中部署和使用应用程序之前,应该设置该应用程序要访问的 Derby RDBMS。

3. 设置 Derby 网络服务器

首先,请确保包装 Apache Derby 10.1。将 DERBY_INSTALL 环境变量设置为 Derby 安装目录,并确保 CLASSPATH 环境变量中包含下列元素:

  • lib/derby.jar
  • lib/derbytools.jar
  • lib/derbynet.jar
  • lib/derbyclient.jar

在源代码分配中,提供的 sp.bat 文件可用于设置这些变量。如果您使用该批处理文件,请确保首先对其进行修改,以反映您自己实际的 Derby 安装目录。然后,您可以使用以下命令在控制台窗口中启动 Derby 网络服务器:

java org.apache.derby.drda.NetworkServerControl start

Derby 服务器启动并在缺省端口 1527 进行侦听。

接下来,创建要使用的数据库。数据库名为 generalstore,它只包含一个名为 promotions 的表。createdb1.sql 文件将执行该创建并填充数据库。

使用 ij 命令执行 SQL 脚本:

java  org.apache.derby.tools.ij  createdb1.sql

createdb1.sql 脚本包含清单 5 所示的 SQL 命令。

清单 5. createdb1.sql 脚本:创建数据库表并填充数据

connect 'jdbc:derby://localhost/generalstore;create=true';
drop table promotion;
create table promotion
  (id char (5) not null,
   message char(40) not null,
   primary key(id));
insert into promotion values ('1', 'Thank your for your order.');
insert into promotion values ('2', 'Have a nice day!');
exit;

如果您看到消息 ERROR 08001: No suitable driver,则所需的 lib/derbyclient.jar 库不在 CLASSPATH 环境变量中。

4. Tomcat 5.5 JNDI 资源引用和 JDBC 连接器

checkoutcart.jsp 页面使用 JSTL 的 SQL 支持标记访问促销数据库并输出促销消息。清单 6 显示访问 RDBMS 的代码摘录。

清单 6. 访问数据库服务器的 checkoutcart.jsp 中的 JSP 代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="storetags" uri="/GeneralStoreTagLibrary" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"  %>
 ...
<sql:query var="rs" dataSource="jdbc/storeDB">
select * from promotion
</sql:query>
 ...
<tr>
<td colspan="5">
<c:forEach var="row" items="${rs.rows}">
   ${row.message}<br/>
</c:forEach>
</td>
</tr>
...

JSTL <sql:query> 标记将通过 JNDI 查找名为 jdbc/storeDB 的数据源。该名称引用是以 J2EE 标准方式在应用程序的 web.xml 部署描述符中定义的。该标准配置适用于 Tomcat 5.5 和 Community Edition。清单 7 显示该配置。

清单 7. 指定 JNDI 数据源引用的 web.xml 中的元素

<resource-ref>
      <description>Derby DB connection</description>
      <res-ref-name>jdbc/storeDB</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
</resource-ref>

现在,您需要配置该引用,以匹配实际的 JDBC 驱动程序和 RDBMS 连接。这是通过一种容器的特定方式完成的,对于 Tomcat 和 Community Edition 来说有所不同。对于 Tomcat 5.5,可以在 META-INF/context.xml 文件(位于 dd 目录)中进行配置(清单 8)。

清单 8. 将 JNDI 资源与 Derby JDBC 连接器相关联的 Tomcat 的特定 context.xml 描述符

<Context>
<Resource name="jdbc/storeDB" auth="Container" type="javax.sql.DataSource"
               maxActive="100" maxIdle="30" maxWait="10000"
               driverClassName="org.apache.derby.jdbc.ClientDriver"
user="APP" password="APP"
               url="c"/>
</Context>

此处,Derby JDBC 驱动程序 org.apache.derby.jdbc.ClientDriver 用于在 URL jdbc:derby://localhost/generalstore 访问数据库。Derby 服务器具有缺省的用户“APP”和密码“APP”。

5. 使用管理器应用程序部署到 Tomcat 5.5 环境

要使用自定义设置部署应用程序 WAR 文件,请启动 Tomcat 5.5 服务器并在 Web 浏览器中指向:

http://localhost:8080/manager/html

您将被提示登录;这要使用我们先前设置的 UserDatabaseRealm。由于需要管理人员角色,因此使用用户“tomcat”和密码“tomcat”。

管理器应用程序将显示所有部署的模块。滚动到底部,此处有一个框“Deploy directory or WAR file located on server”。对于“Context path”,输入 /Shopping,而对于“WAR or Directory URL”,输入到 generalstore.war 文件的绝对路径。按下 Deploy 按钮。现在您应该看到运行于 /Shopping 上下文的 General Store 应用程序。图 4 显示成功部署后的管理器应用程序。

图 4. 使用 Tomcat 管理器成功部署应用程序
使用 Tomcat 管理器成功部署应用程序
使用 Tomcat 管理器成功部署应用程序

使用下面的 URL 尝试访问应用程序:

http://localhost:8080/Shopping/store.cgi

向购物车添加某物。请注意,将显示促销消息。这表明 Derby RDBMS 可以获取这些消息。

将应用程序迁移到 Community Edition

通常,要将 General Store 应用程序迁移到 Community Edition 1.0,您需要执行以下操作:

  • 对 Tomcat UserDatabaseRealm 进行配置并将它替换为 Community Edition 容器管理的身份验证领域。
  • 启动并使用 Community Edition 附带的 IBM Cloudscape™ RDBMS(基于 Derby),而不是单机版 Derby。
  • 创建 Community Edition 管理的新数据源。
  • 创建所需的数据库表并为其填充数据。
  • 配置指向 Community Edition 中的 Cloudscape 数据源的 JNDI 引用。

迁移过程中不需要更改的元素有:

  • web.xml 中对数据源的 JNDI 引用。
  • web.xml 中保护应用程序的安全性配置。

对于这些元素,要小心进行编码,以使其在 J2EE 容器之间可以移植。

1. 在 Community Edition 中更改 Tomcat 连接器使用的端口

如果您需要在 Community Edition 中更改 Tomcat 连接器使用的端口,不要查找 server.xml 文件;Community Edition 中没有这个文件。取而代之,要在 Community Edition 安装目录下的 var/config 目录中查找 config.xml 文件。清单 9 显示包含 Tomcat 配置元素的 config.xml 的摘录,其中端口号以粗体表示。

清单 9. Community Edition 的 config.xml 文件中的 Tomcat 连接器配置

<gbean name="TomcatWebConnector">
      <attribute name="host">0.0.0.0</attribute>
      <attribute name="port">8080</attribute>
      <attribute name="redirectPort">8443</attribute>
      <attribute name="catalinaHome">var/catalina</attribute>
    </gbean>
    <gbean name="TomcatAJPConnector">
      <attribute name="host">0.0.0.0</attribute>
      <attribute name="port">8009</attribute>
      <attribute name="redirectPort">8443</attribute>
    </gbean>
    <gbean name="TomcatWebSSLConnector">
      <attribute name="host">0.0.0.0</attribute>
      <attribute name="port">8443</attribute>
    </gbean>

如果您在 config.xml 中更改端口号并重新启动 Community Edition,则 Tomcat 将使用最新配置的端口。

另外,您也可以使用 Web 控制台添加 Tomcat 连接器或者编辑连接器使用的端口号。只需在 Web 控制台菜单中选择 Server => Web Server

2. 配置 Community Edition 管理的身份验证领域

缺省情况下,Community Edition 管理名为“geronimo-properties-realm”的领域,该领域使用 var/security 目录下的属性文件存储它的用户、密码和组信息。该领域中配置的唯一用户是密码为“manager”的“system”,它属于“admin”组/角色。

该领域实际上是在缺省的 Tomcat Host 组件中配置的。您可以在 doc/plan 目录中的名为 j2ee-tomcat-plan.xml 的部署计划中看到该配置;该部署计划等效于可以在 Tomcat 5.5 服务器找到的 server.xml 文件。清单 10 显示在 Host 配置领域的代码。

清单 10. j2ee-tomcat-plan.xml 中领域在 Tomcat Engine 组件的缺省配置

		 <gbean name="TomcatEngine" class="org.apache.geronimo.tomcat.EngineGBean">
        <attribute name="className">org.apache.geronimo.tomcat.TomcatEngine</attribute>
        <attribute name="initParams">
            name=Geronimo
            defaultHost=0.0.0.0
        </attribute>
        <references name="Hosts">
            <pattern>
                <gbean-name>geronimo.server:j2eeType=Host,*</gbean-name>
            </pattern>
        </references>
        <reference name="RealmGBean">
            <name>TomcatJAASRealm</name>
        </reference>
        <reference name="TomcatValveChain">
            <name>FirstValve</name>
        </reference>
    </gbean>

在 Community Edition 配置中,Tomcat 中的所有组件(Engine、Host,等等)都包装在 GBean 中。j2ee-tomcat-plan.xml 文件实质上是 GBean 的连接关系图,它等效于 server.xml。

在本例中,我们不需要修改缺省配置,但是如果您修改 Tomcat 系统配置(如添加虚拟主机),则需要使用以下命令重新部署计划:

deploy -user system -password manager redeploy
  new-j2ee-tomcat-plan.xml org/apache/geronimo/Tomcat

如果出现问题,维护初始计划的副本。

要在 General Store 应用程序中使用缺省领域,您需要为 Web 应用程序创建 Community Edition 的特定部署计划。该计划名为 geronimo-web.xml,如果将它放在 WEB-INF 目录中,它可以作为 WAR 文件的一部分。清单 11 显示如何指定应用程序的容器领域:

清单 11. 为应用程序配置 Community Edition 容器管理的身份验证领域

<web-app
    xmlns="http://geronimo.apache.org/xml/ns/web/tomcat"
    xmlns:sec="http://geronimo.apache.org/xml/ns/security"
    xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.0"
    xmlns:naming="http://geronimo.apache.org/xml/ns/naming"
    parentId="org/apache/geronimo/Security"
    configId="com/ibm/wasce/GeneralStore">
    <context-root>/Shopping</context-root>
    <context-priority-classloader>false</context-priority-classloader>
    ...
    <security-realm-name>geronimo-properties-realm</security-realm-name>
   <sec:security
        doas-current-caller="false"
        use-context-handler="false">
        <sec:default-principal realm-name="geronimo-properties-realm">
            <sec:principal 
            class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" 
            name="system"/>
        </sec:default-principal>
        <sec:role-mappings>
        <sec:role role-name="admin">
          <sec:realm realm-name="geronimo-properties-realm">
          <sec:principal 
          class="org.apache.geronimo.security.realm.providers.GeronimoGroupPrincipal" 
          name="admin"/>
          <sec:principal 
           class="org.apache.geronimo.security.realm.providers.GeronimoUserPrincipal" 
           name="system"/>
            </sec:realm>
            </sec:role>
        </sec:role-mappings>
   </sec:security>

请注意,在清单 12 中将 <context-root> 设置为“/Shopping”,以在与 Tomcat 5.5 版本相同的上下文路径中访问 Community Edition 应用程序。

>security-realm-name> 指定 geronimo-properties-realm。>security> 元素指定 geronimo-properties-realm 的角色如何映射到 web.xml 中的 >security-constraint> 元素引用的角色。

3. 在 Community Edition 中启动 Cloudscape RDBMS 网络服务器

请确保关闭单机版 Derby,因为它在相同的端口 (1527) 侦听,这会产生冲突。

在 Community Edition 运行后,登录到控制台,然后选择 Application => J2EE Connectors。启动称为 org/apache/geronimo/DefaultDatabase 的配置,这是一个网络数据库实例。

4. 创建促销数据库表并填写数据

启动 org/apache/geronimo/DefaultDatabase 配置后,Cloudscape 网路服务器要在标准端口 1527 侦听请求,您可以使用 ij 命令运行 createdb1.sql 脚本:

java  org.apache.derby.tools.ij  createdb1.sql

该命令将创建所需的数据库和表,从而使用网络驱动程序访问 Cloudscape 数据库实例。

5. 创建 Community Edition 管理的数据源

要创建 Community Edition 管理的数据源,请使用控制台并选择 Applications => Database Pools。在右侧窗格中单击 Add New Datasource。使用表 3 中的值创建数据源。

表 3. 创建 Community Edition 管理的数据源
字段
NameStoreDatasource
JNDI Name留空
Dependency从列表中选择 org.apache.derby/jars/derbyclient-10.1.ibm.jar。
Driver Classnameorg.apache.derby.jdbc.ClientDriver
DB URLjdbc:derby://localhost/generalstore
DB User NameAPP
DB PasswordAPP
Pool Max Capacity20
Pool Initial Capacity10

按下 Create 按钮,创建 Community Edition 管理的名为 StoreDatasource 的池化数据源。该数据源被设置为访问 Cloudscape 网络服务器的 Community Edition 管理的实例。

成功部署后,就创建并启动了名为 StoreDatasource 的新配置。您可以通过在控制台菜单中单击 Applications => All Configurations Applications => J2EE Connectors 看到此配置。图 5 显示在选择 J2EE Connectors 后运行的 StoreDatasource 配置。

图 5. 处于运行状态的 StoreDatasource
处于运行状态的 StoreDatasource
处于运行状态的 StoreDatasource

6. 将 StoreDatasource 与 JNDI 引用相关联

通过使用 geronimo-web.xml 部署计划中的 <resource-ref> 元素,您可以将 StoreDatasource 与 jdbc/storeDB 的 web.xml JNDI 引用相关联,如清单 12 所示。

清单 12. 将容器管理的 StoreDatasource 与应用程序的 JNDI 资源引用相关联

<naming:resource-ref>
        <naming:ref-name>jdbc/storeDB</naming:ref-name>
        <naming:resource-link>
          StoreDatasource
        </naming:resource-link>
</naming:resource-ref>

先前在 Tomcat 5.5 中配置该关联时,它使用 context.xml 文件。在 Community Edition 中,与 context.xml 等价的文件是 geronimo-web.xml 文件。这里执行的配置只影响本地应用程序上下文。

部署到 Community Edition 环境

您可以使用以下命令将 generalstore.war 文件部署到 Community Edition 1.0:

deploy -user system -password manager deploy generalstore.war

您也可以通过在控制台单击 Applications => All Configurations 并使用右侧窗格中的 Install New Application 框来部署 generalstore.war 文件。

部署应用程序后,您可以使用浏览器在相同的 URL 访问它:

http://localhost:8080/Shopping/store.cgi

当提示您登录/进行身份验证时,使用“system”作为用户名,“manager”作为密码。在尝试向购物车放入某物时,您将注意到现在应用程序从 Cloudscape 获取数据并显示促销消息:Thank you for your order. Have a nice day!,如图 6 所示。

图 6. RDBMS 中具有促销消息的购物车
RDBMS 中具有促销消息的购物车
RDBMS 中具有促销消息的购物车

结束语

将应用程序从 Tomcat 5.5 迁移到 WebSphere Application Community Edition 1.0 是相当简单的,因为完整的 Tomcat 5.5 已进行集成,实际上它是 Community Edition 的一部分。然而,由于 Community Edition 执行所有配置管理,因此 Tomcat 用户在 server.xml 或 context.xml 中找到的配置元素要迁移到:

  • config.xml:用于快速更改参数(如连接器的端口号)。
  • j2ee-tomcat-plan.xml:用于 Tomcat 组件(如虚拟主机、领域和 valve 配置);在该计划中进行的修改必须重新部署到服务器才能起作用。
  • geronimo-web.xml:应用程序上下文的 Community Edition 的特定部署计划;它位于档案文件的 WEB-INF 目录中。

通过将 Web 应用程序从 Tomcat 5.5 逐步迁移到 WebSphere Application Server Community Edition,我们看到该迁移的要点包括:转换身份验证领域、JNDI 引用映射、设置 Cloudscape 网络服务器以及配置 JDBC 连接器。


下载资源


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=WebSphere, Open source
ArticleID=100898
ArticleTitle=WebSphere 迁移: 将 Web 应用程序从 Apache Tomcat 迁移到 WebSphere Application Server Community Edition
publish-date=12012005