您的位置:首页 > 移动开发 > Unity3D

使用 WebSphere Application Server Community Edition 开发和部署 J2EE Web 服务

2012-10-08 10:41 411 查看
现在开始——J2EE Web 服务概述

Web 服务 是一种可通过网络调用的软件组件,它使用标准化的 XML 消息传递系统进行数据交换。您可以通过标准网络协议访问 Web 服务,例如简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)和将 SOAP 用作消息传递系统的 HTTP。Web 服务通过 Web 服务描述语言(Web Services Description Language,WSDL)规范(要获得详细介绍 WSDL 内容的链接,请参见参考资料)描述,并可在统一描述、发现和集成(Universal Description, Discovery, and Integration,UDDI)注册中心注册,相关客户机可以在此处查找该服务。Web 服务的客户机可以在任何平台上用任何语言编写,它们可以按照 WSDL 文件中的规则调用该服务。

Web 服务使用两个重要的规范,它们是:

WSDL——一种 Web 服务描述语言,它将 Web 服务描述为一组端点,这些端点在包含面向文档或面向过程的信息的消息中运行。

SOAP——一种基于 XML 的对象调用协议(要获取详细介绍 SOAP 内容的链接,请参见参考资料)。

在 J2EE 1.4 中,Web 服务可用两种端点实现:POJO(即 Servlet)端点和 EJB 端点:

如果服务实现类是一个普通的 Java 对象,则此类 Web 服务将称为 POJO Web 服务。在 Community Edition 中,此类 Web 服务在 Web 应用程序的部署描述符中被注册为 Servlet。

如果服务实现类是一个无状态会话 Bean,且该会话 Bean 类中的方法已公开,以供 SOAP 调用进行调用,则此类 Web 服务将称为 EJB Web 服务。

在 Community Edition 中实现 J2EE Web 服务

Community Edition V1.1 使用 Apache Axis 1.4(要获取详细介绍 Axis 的链接,请参见参考资料)来支持 J2EE Web 服务。Axis 是 Apache Software Foundation 提供的一个 Web 运行时。它使用 GBean 配置并插入 Community Edition 中。Axis 可对前面提到的两种 J2EE Web 服务端点提供支持。对于 POJO Web 服务,请求-响应流将如图 1 所示。注意:此图显示的是一个简化版本,它并未显示 Axis 与 Community Edition 集成的所有细节。

图 1. WebSphere Application Server Community Edition 中的 POJO Web 服务处理



在图 1 所示的事件流中,Web 服务先由自定义 Community Edition 部署器部署到服务器中。在部署过程中,部署器提取部署描述符中的所有信息,然后将它们填充到 GBean(即
AxisWebServiceContainer
)中。在接下来的应用程序启动过程中,所有 Servlet 都在 Tomcat 中注册。在注册期间,将为与 POJO Web 服务相对应的 URL 注册一个名为 POJOWebServiceServlet 的自定义 Servlet。
AxisWebServiceContainer
和表示 Web 服务的 POJO 将被置于 ServletContext 中,其相应的键也被作为初始化参数传递给 POJOWebServiceServlet。此时,只要使用 Web 服务的配置 URL 对该服务进行调用,就会调用 POJOWebServiceServlet,后者将查找
AxisWebServiceContainer
和 POJO 并将它们传递给 Axis 以及请求和响应对象。随后,Axis 将对 POJO 调用请求的方法并返回响应。对于 EJB Web 服务,EJB 容器(即 OpenEJB)也充当请求和响应之间的连接层。图 2 显示了针对 EJB Web 服务的简化的请求-响应流。

图 2. WebSphere Application Server Community Edition 中的 EJB Web 服务处理



请注意,企业 Bean 用 EJB 容器承载。它由
EJBContainerProvider
类调用,该类是在 Axis 中注册的主处理程序。因此,将由此主处理程序(由 Community Edition 打包的自定义处理程序)负责调用在 OpenEJB 容器中部署的会话 Bean。与 POJO Web 服务相同,此过程也会注册一个值(即 EJBWebServiceValve),以允许通过自定义方式处理 Web 服务请求。此值将负责调用
AxisWebServiceContainer
类上的方法。

应用程序概述

本教程中的应用程序(请参见下载部分)表示一个用于买卖股票的在线经纪业工具。此应用程序包含下列五个页面:

Login

Registration

User Details

Available Stocks

User Portfolio

此应用程序提供下面两种 Web 服务:

StockService


UserStockService


图 3 显示了相应的应用程序流。

图 3. 在线经纪业应用程序流



首先向用户显示的是 Login 页面。在这里,用户输入其用户名和密码并提交页面。在用户凭据得到验证后,将显示 Available Stocks 页面,用户可以在此页面上查看当前交易所中待售的所有股票。通过单击 Buy 按钮,用户可以选择购买任何股票(条件是用户帐户中具有足够的资金)。交易成功完成后,用户将被带回 Available Stocks 页面。

单击 View Your Portfolio 链接可使用户转到其投资组合页面,其中将显示用户拥有的所有股票。在此页面上,用户可以销售他或她拥有的任何股票。此页还会在 User Cash 字段中显示用户的活动现金。对于新用户,他或她可以单击 Login 页面上 Register 按钮,以转到 Registration 页面。随后,该用户可以输入所有字段,然后单击 Submit 进行注册。通过调用两种 Web 服务,他或她还可以在独立的客户机中查看可用的股票及其投资组合。这两种 Web 服务分别是 StockService 和 UserStockService。

设置数据库

使用 DB2 Express-C Control Center 创建数据库

在接下来的部分中,您将为 DB2 Express-C Control Center 中的用户和组创建数据库和表。为此,请执行下列步骤:

打开 Control Center。

右键单击 All Databases,然后选择 Create Database > Standard

输入
TRADEDB
作为数据库的名称。

单击 Finish

将创建一个名为 TRADEDB 的新数据库,它将在 All Databases 下列出(参见图 4)。

图 4. 新数据库清单



使用 Control Center 创建表

在前一部分中,您创建了一个名为 TRADEDB 的数据库。现在,您将在该数据库中为用户 (USERS)、股票 (STOCKS) 和用户帐户 (TRADINGACCOUNT) 创建表。表 1. 显示了各个表中的字段。

表 1. USERS

字段名称数据类型
useridVARCHAR(15)主键非空
nameVARCHAR(50)
passwordVARCHAR(24)
addressVARCHAR(96)
cashDECIMAL
表 2. STOCKS

字段名称数据类型
IDVARCHAR(8)主键非空
nameVARCHAR(100)
PriceDECIMAL
表 3. TRADINGACCOUNT

字段名称数据类型
useridVARCHAR(15)主键非空
stockidVARCHAR(18)主键非空
quantityINT
要创建表,请按以下过程操作:

单击 TRADEDB 下的 Tables,然后右键单击 Create

输入
USERS
作为表名,然后单击 Next

向表中添加列,然后单击 Add 并输入列名。

选择 Data type(可为空或非空),然后单击 Apply

要添加并命名所有列,请重复步骤 3 和 4。

单击 Next > Next > Next,导航到新表中标题为 Define keys 的屏幕。单击 Add Primary

在可用列中选择主键列,然后单击 Finish

请按照步骤 1-7 操作,以创建所有这三个表。

右键单击 TRADINGACCOUNT 表,然后单击 Select alter

在显示的对话框中,选择 Keys 选项卡。

单击 Add Foreign

在 PARENT 表(或别名部分)中,选择该模式作为创建这些表时所使用的模式。

选择 STOCKS 作为表的名称。这会在主键列表中显示主键 STOCKS。

在 Available columns 部分中,选择 STOCKID,然后单击 > 按钮。

单击 OK

请重复此过程,并将 USERS 表的 USERID 字段映射到 TRADINGACCOUNT 的 USERID。

完成以上步骤后,将在 ADMINISTRATOR 模式下创建这些表。(注意:模式分配取决于您使用的 Windows 登录。如果您以 db2admin 身份登录,将在 DB2ADMIN 模式下创建这些表。)创建完毕后,用户可以在 DB2 Express-C Control Center 中查看这些表,如图 5 所示。

图 5. DB2 Express-C Control Center 中的表



在表中添加值

现在,请按照下列说明向这些表中填充值(参见图 6):

在 TRADEDB Tables 区域中,请选择 USERS 表。

右键单击 USERS,然后单击 Open > Add row

输入各个值,然后选择 Commit

在输入完所有值后,请单击 Close

对于所有其他表,请同样执行这些步骤。请注意,您可以使用 db2_brokerage.sql 文件中的值,该文件位于 sql 目录中。

图 6. 在表中添加值



使用脚本创建表

除上述方式外,您还可以执行下列步骤,以利用 SQL 脚本创建数据库、表和数据。本教程中的示例具有一个名为 db2_brokerage.sql 的脚本文件;请在 DB2 命令行处执行此脚本,以创建数据库和表,如下所示:

在 Windows 命令提示符处键入
db2cw
,以创建一个 DB2 命令窗口。这将打开另一个命令窗口,您可以在其中输入 DB2 命令。

请在 DB2 命令窗口中执行该脚本文件 (db2 -tvf db2_brokerage.sql)。如果 db2_brokerage.sql 所在的目录与执行命令所在的目录相同,则应提供此路径。否则,您必须提供完整路径,而不是只提供 db2_brokerage.sql。

在未出错的情况下,您应看到所有 SQL 命令都得到成功执行。此脚本会创建数据库及其相关的表,如图 7 所示。

图 7. 数据库及其相关的表



在 Eclipse WTP 中使用 XDoclet 生成 J2EE 构件

您可以选择手动开发类,也可以使用 XDoclet。要使用 XDoclet 创建企业 Bean,请按照下列步骤操作:

右键单击要将 EJB 类归属到的包。

选择 New > Other

在 New 对话框中,选择 JB/XDoclet Enterprise JavaBean,然后单击 Next。(注意:如果您收到指示注释提供程序设置有误的错误消息,请转到 Window > Preferences > Xdoclet,然后单击 XDoclet。设置 XDoclet Home 标记,以使其指向 XDoclet 在系统中的 home 目录。选择正确的版本,然后单击 OK。)

选择 Session Bean,然后单击 Next

在 Enterprise JavaBean 对话框中,请输入相关的信息,然后单击 Next

继续输入完其他信息,然后单击 Next > Finish

通过 XDoclet,您可以创建很多其他必需的 J2EE 构件,因而可方便地生成大量样本代码。由于您已导入此应用程序所需的所有 EJB 组件,因此不必再执行此步骤。

生成 Web 服务的 WSDL 文件和映射文件

本教程前面已经提到,此应用程序包括两项 Web 服务:一个公开为 Servlet 端点,另一个则公开为 EJB 端点。Community Edition 并未提供生成 Java API for XML-based RPC (JAX-RPC) 映射文件的机制。您可以使用 Apache Axis WSDL2Java 和 Java2WSDL 工具生成 WSDL/存根,但需要使用 Java WSDP 的 wscompile 实用工具来生成 JAX-RPC 映射文件。您也可以使用 Java WSDP 生成 WSDL。在本文提供的示例应用程序存档的 Java WSDP 目录中,您将找到可用于为这两种 Web 服务(StockService 和 UserStockService)生成 WSDL 和 JAX-RPC 映射文件的配置文件。它们分别是 config_s 和 config_us。清单 1 和 2 中提供了用于运行 wscompile 来生成这些映射文件的命令。(注意:因空间限制,这两个清单中的行被折断。)

其中,
<dest-dir>
表示存放生成的类、WSDL 和映射文件的目录的绝对路径。
<workspace>
表示 Eclipse 工作区目录的绝对路径。而
<wasce_home>
则表示 Community Edition 安装目录。

清单 1. 用于运行 wscompile 来生成映射文件的命令

wscompile -gen:server -d <dest-dir> -mapping <dest-dir>\mapping.xml -cp "<wasce_home>\
repository\org\apache\geronimo\specs\geronimo-j2ee_1.4_spec\
1.1\geronimo-j2ee_1.4_spec-1.1.jar;<workspace>\BrokerageEjb\build\classes;
<workspace>\BrokerageWebApp\build\classes;" C:\wscompile\config_s.xml

清单 2. 用于运行 wscompile 来生成映射文件的路径(续)

wscompile -gen:server -d C:\wscompile -mapping C:\wscompile\
mapping.xml -cp "<wasce_home>\repository\org\apache\geronimo\specs\
geronimo-j2ee_1.4_spec\1.1\geronimo-j2ee_1.4_spec-1.1.jar;<workspace>\
BrokerageEjb\build\classes;" C:\wscompile\config_us.xml

注意:在安装 Java WSDP 后,可以将
<JWSDP_HOME>\jaxrpc\bin
添加到 PATH 环境变量中,以便从命令提示符处访问 wscompile。JWSDP_HOME 的缺省值是 C:\Sun\jwsdp-2.0。

在为每个 Web 服务都生成 WSDL 和映射文件后,请将它们置于 Eclipse 项目中的适当位置:

对于无状态会话 Bean 端点(例如 UserStockService),请将 mapping.xml 文件直接放在 ejbModule 的 META-INF 目录中。

在该同一目录内,请创建子目录 wsdl,然后将 WSDL 文件复制到该目录中。

同样,对于 Servlet 端点,请将 mapping.xml 文件复制到 WEB-INF 目录中,并将 WSDL 文件复制到 WEB-INF/wsdl 中。

注意:如果您要使用同一个目标目录,请先为一个 Web 服务生成文件,并在复制文件后清除输出目录中的文件,然后再为下一个 Web 服务生成文件。您也可以从 brokerage 目录的 generated files 目录中访问已生成的文件。)

编写部署描述符

在本部分中,您将学习如何编写 J2EE 和 Geronimo 特定的部署描述符。

编写 J2EE 特定的部署描述符

由于此应用程序中同时包含 EJB Servlet 和 Web 服务,因此需要编写五个 J2EE 部署描述符,其中 Web 模块、EJB 模块和 EAR 文件各一个,其他两个则用于两项 Web 服务。所有这些描述符都存储在 j2ee-descriptors 目录中。(注意:介绍各个部署描述符及其元素的含义已超出本教程的范围;您可以参考 J2EE 规范来了解此信息。)

由于 Eclipse WTP 为每个计划都提供了基于模式的编辑器,因此您不必手动编写这些描述符。要使用编辑器创建计划,请参考图 9:

在 Eclipse 中,请选择 BrokerageWebApp 项目,然后展开此项目以显示其内容。

单击 Deployment Descriptor 以在编辑器中打开 web.xml 文件。

选择编辑器的 Design 选项卡,以打开一个显示树形结构的新编辑器。

右键单击 web-app,以显示可通过该编辑器执行的所有可能的操作。编辑器将显示您可以添加和删除的所有子项。

请参考 brokerage.zip 文件的 j2ee-descriptors 目录中的部署描述符,然后创建描述符。您也可以直接将描述符导入到 META-INF 和 WEB-INF 目录中。

图 9. 在 Eclipse WTP 中创建应用程序



回页首

编写 Geronimo 特定的部署描述符

接下来,您需要为 Web (geronimo-web.xml) 和 EJB (openejb-jar.xml) 模块以及整个企业应用程序 (geronimo-application.xml) 编写 Geronimo 特定的部署描述符。下面显示了这些描述符,它们还保存在 Geronimo-descriptors 目录中。

部署描述符 1:geronimo-web.xml

geronimo-web.xml 文件在 web-app 的 WEB-INF 目录中创建:

双击 geronimo-web.xml 文件,这会打开 Community Edition 部署计划编辑器,如图 10 所示。

图 10. 部署计划编辑器



单击 Community Edition 部署计划编辑器的 Naming 选项卡。

在 Resource References 部分中,单击 Add 按钮。这会显示 Resource Reference Details 屏幕。

请在 Reference Name 中输入
jdbc/TradeDB
并在 Resource Link 中输入
TradeDS


单击 Finish

图 11. Resource Reference Details



在 Community Edition 部署计划编辑器中,请单击 Deployment 选项卡,以打开 Deployment Configuration 屏幕。

单击 Add,然后添加具有下列详细信息的两个依赖项:

Group ID:geronimo

Artifact ID:axis

Version: 1.1

Artifact type:car

Group ID:console.dbpool

Artifact ID:TradeDS

Version: 1.0

Artifact type:rar

这会为该 Web 应用程序创建部署计划。当您单击 Source 选项卡时,应显示计划的内容,如清单 3 所示。您也可以直接将清单 3 的内容输入 Source 编辑器。

清单 3. 输入 Source 编辑器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://geronimo.apache.org/xml/ns/j2ee/web-1.1" xmlns:nam=
"http://geronimo.apache.org/xml/ns/naming-1.1" xmlns:sec=
"http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys=
"http://geronimo.apache.org/xml/ns/deployment-1.1">
<sys:environment>
<sys:moduleId>
<sys:groupId>wasce-samples</sys:groupId>
<sys:artifactId>brokerage-web</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>war</sys:type>
</sys:moduleId>
<sys:dependencies>
<sys:dependency>
<sys:groupId>geronimo</sys:groupId>
<sys:artifactId>axis</sys:artifactId>
<sys:version>1.1</sys:version>
<sys:type>car</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>console.dbpool</sys:groupId>
<sys:artifactId>TradeDS</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>rar</sys:type>
</sys:dependency>
</sys:dependencies>
</sys:environment>
<context-root>/brokerage</context-root>
<nam:resource-ref>
<nam:ref-name>jdbc/TradeDB</nam:ref-name>
<nam:resource-link>TradeDS</nam:resource-link>
</nam:resource-ref>
</web-app>

注意:因空间限制,清单 3 中的第二行到第四行被折断。)

清单 3 显示了 geronimo-web.xml 文件。其中,
environment
标记表示 Web 应用程序环境。它定义了 Web 模块的模块 ID 及其依赖项(例如此模块所依赖的其他模块)。
context-root
标记用于将 Web 应用程序的上下文根提供给
/brokerage
。另一个重要的标记是
resource-ref
,它用于将名称
jdbc/TradeDB
映射到数据库池
TradeDS
,您将在以下部分中部署该数据库池。这会导致将相应的数据源绑定到 java:Java Naming and Directory Interface (JNDI) 中的 comp/env/jdbc/TradeDB。

部署描述符 2:openejb-jar.xml

openejb-jar.xml 文件在 EJB 模块的 META-INF 目录中创建,如清单 4 所示。

清单 4. openejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<openejb-jar xmlns="http://www.openejb.org/xml/ns/openejb-jar-2.1" xmlns:nam=
"http://geronimo.apache.org/xml/ns/naming-1.1" xmlns:pkgen=
"http://www.openejb.org/xml/ns/pkgen-2.0" xmlns:sec=
"http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys=
"http://geronimo.apache.org/xml/ns/deployment-1.1">
<sys:environment>
<sys:moduleId>
<sys:groupId>wasce-samples</sys:groupId>
<sys:artifactId>BrokerageEJB</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>car</sys:type>
</sys:moduleId>
<sys:dependencies>
<sys:dependency>
<sys:groupId>geronimo</sys:groupId>
<sys:artifactId>tomcat</sys:artifactId>
<sys:version>1.1</sys:version>
<sys:type>car</sys:type>
</sys:dependency>
<sys:dependency>
<sys:groupId>console.dbpool</sys:groupId>
<sys:artifactId>TradeDS</sys:artifactId>
<sys:version>1.0</sys:version>
<sys:type>rar</sys:type>
</sys:dependency>
</sys:dependencies>
</sys:environment>
<enterprise-beans>
<session>
<ejb-name>UserStock</ejb-name>
<jndi-name>ejb/UserStockBean</jndi-name>
<nam:resource-ref>
<nam:ref-name>jdbc/TradeDB</nam:ref-name>
<nam:resource-link>TradeDS</nam:resource-link>
</nam:resource-ref>
</session>
</enterprise-beans>
</openejb-jar>

注意:因空间限制,清单 4 中的第二行到第五行被折断。)

openejb-jar.xml 文件还包含模块 ID 和依赖项声明。在此示例中,它有一个用于将 Bean 名称映射到
jndi-name
的会话元素。此外,它还提供了
resource-ref
元素。图 12 显示了 openejb-jar.xml 的 Community Edition 部署计划编辑器。

图 12. 部署计划编辑器



部署描述符 3:geronimo-application.xml

geronimo-application.xml 文件在 EAR 的 META-INF 目录中创建,例如 EarContent/META-INF 的 BrokerageApp 项目(参见清单 5)。

清单 5. geronimo-application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-1.1" xmlns:sec=
"http://geronimo.apache.org/xml/ns/security-1.1" xmlns:sys=
"http://geronimo.apache.org/xml/ns/deployment-1.1" application-name="BrokerageApp">
<sys:environment>
<sys:moduleId>
<sys:groupId>wasce-samples</sys:groupId>
<sys:artifactId>brokerage</sys:artifactId>
<sys:version>1.1</sys:version>
<sys:type>car</sys:type>
</sys:moduleId>
</sys:environment>
</application>

注意:因空间限制,清单 5 中的第二行和第三行被折断。)

对于此应用程序,您无需对此文件进行任何更改。WTP 还提供了基于模式的 XML 编辑器供您编写计划时使用。图 13 显示了 ejb-plan 的基于模式的编辑器。

图 13. 基于模式的编辑器



如果双击 Community Edition 特定的部署计划未能在计划编辑器中将其打开,请右键单击 Community Edition 特定的部署计划文件,然后选择 Open with Community Edition Deployment Plan Editor。这会打开该编辑器。

将项目导入 Eclipse WTP

本教程附带的示例应用程序包含 EAR 文件的压缩源文件,您可以按照下列步骤将其导入 Eclipse WTP:

选择 File > Import > J2EE,选择 EAR File,然后单击 Next

单击 Browse,选择要导入的文件(例如 BrokerageApp.ear),然后单击 Next

在选择 Web 和 EJB 模块后,请单击 Next

单击 Finish

在授权对话框中,单击 I agree。随即将导入 EAR 文件并创建相应的 Eclipse 项目。

右键单击 BrokerageApp 项目,然后选择 Targeted Runtimes 选项。

选择 Websphere Community Edition Server v1.1 作为目标运行时,然后单击 OK

重新构建所有项目。现在还剩下 4 个错误和 16 个警告,但暂时请忽略它们。

定义服务器

要部署应用程序,首先需要在 Eclipse WTP 中创建服务器。为此,请按照下列步骤操作:

在 Servers Tab 窗口中单击右键,然后选择 New Server(参见图 14)。

图 14. 定义新服务器



选择 Websphere Application Server Community 1.1 Server,然后单击 Next

在 New Server 对话框中,请填写 Application Server Installation Directory 字段,以使其指向服务器的 home 目录,然后单击 Next

接下来,请输入服务器的详细信息,如图 15 所示。

图 15. 填充新服务器字段



单击 Finish

启动服务器并登录到控制台中

要启动服务器并登录到控制台中,请按照下列步骤操作:

在 Servers 选项卡中,右键单击 Community Edition 1.1,然后选择 Start。这将在 Eclipse 中启动服务器。

当服务器状态变为已启动 时,请再次右键单击服务器图标,然后选择 Launch Community Edition Console

现在,请输入用户名
system
以及密码
manager
,然后单击 Login 按钮。这会将您带到管理控制台的欢迎页。

部署数据库池

要连接到 DB2,必须使用数据库池。您可以使用 Community Edition Console 中的向导来部署数据库池计划,以创建数据库池。请执行下列操作:

登录到 Community Edition Console。

在 Services 下,请选择 Database Pools

选择 Using the Geronimo Database Pools Wizard

在 Name for Database Pools 字段中输入
TradeDS
,然后单击 Next

输入图 16 中所示的详细信息,然后单击 Next

图 16. 填充 Create Database Pool 屏幕



您可以对连接进行测试,以检查是否存在任何错误,然后部署数据源。

您可能会看到一个与授权相关的错误。要解决此错误,请返回并单击 Skip Test and Show Plan 按钮。

将部署计划复制到一个文件中,然后将其另存为
db2-datasource-plan.xml


向存储库的 DB2 license .jar 文件中添加依赖项,如清单 6 所示。

清单 6. 向 DB2 license .jar 文件中添加依赖项

<dep:dependency>
<dep:groupId>com.ibm.db2</dep:groupId>
<dep:artifactId>db2jcc_license_cu</dep:artifactId>
<dep:version>8.2</dep:version>
<dep: type>jar</dep:type>
</dep:dependency>

现在,您可以通过部署此计划来部署数据库池了。操作方法是:在控制台中选择 Deploy New 选项。

请选择 tranql-connector-db2-xa-1.1.rar 作为存档,并选择 db2-datasource-plan.xml 作为计划。

单击 Install

当您部署该池后,将启动并运行该池。在编辑属性以反映数据库配置后,您也可以使用 brokerage.zip 的 plans 目录中提供的计划文件。请记住,您在计划中配置的用户应有权访问您创建表时所使用的模式。

图 17. 已安装的 J2EE 连接器



部署应用程序

本部分将介绍如何使用管理控制台部署应用程序。要开始此过程,请按照下列步骤操作:

右键单击服务器图标,然后选择 Add and remove projects

在 Add and Remove Projects 对话框中,请选择 BrokerageApp,然后单击 Add 将此项目添加到 Configured projects 列表中。

单击 Finish

右键单击服务器图标,然后选择 Publish 部署应用程序。

注意:如果部署因
java.lang.IllegalArgumentException: targetPath is absolute
异常而失败,请按照下列步骤操作:

关闭并重新启动 Eclipse,然后重试。此问题可能会消失。

如果步骤 1 未能解决此问题,请将 .ear 文件导出到一个临时位置,然后用提取工具将其打开,并从EAR 文件内的 WAR 文件中删除 http: 目录。

现在,您需要使用管理控制台部署此应用程序(参见图 18 和 19)。

图 18. 使用管理控制台进行部署



图 19. 使用管理控制台进行部署



测试应用程序

至此,您已成功地部署了应用程序,现在该开始测试了。在本部分中,您将学习如何使用 WTP 中提供的 Web Services Explorer 工具。

访问应用程序

请执行下列步骤访问应用程序:

在 Navigator 区域中,请选择 Web Application (BrokerageWebApp)

单击右键,选择 Run As,然后选择 Run on Server

选择现有服务器。选择 Community Edition 1.1(即您在前面定义的服务器)。

如果您已添加了项目,请选择 NextFinish

您可以从 http://localhost:8080/brokerage/ 处访问该应用程序。

图 20. 访问应用程序



回页首

使用应用程序:应用程序流

现在,您可以尝试用该应用程序执行一些任务了!要开始此过程,请按照下列步骤操作:

输入用户名
j2ee
和密码
password
,登录到应用程序中。您将被带到 Available Stocks 页。

在某一可用股票下,请输入数量
2
,然后选择 Buy 单选按钮。

单击 Buy Stock 按钮。

提交请求后,请单击 View Your Portfolio 链接,它会将您带到 Portfolio 屏幕。在此屏幕上,您可以按类似的方式销售股票。

图 21. Available Stocks 页



图 22. Portfolio 页



单击 User Info 按钮,以访问显示用户详细信息的页面。

图 23. 用户详细信息



如果您想注册新用户,请在 Login 页上单击 Register 按钮,以访问可以输入用户详细信息的注册页。

回页首

调用并测试 Web 服务

下一步便是使用 WTP 工具测试 Web 服务。

Web Services Explorer

WTP 提供了一个名为 Web Services Explorer 的工具,您可以利用它来测试已部署的 Web 服务。下列步骤介绍如何使用 Web Services Explorer 调用已部署的 Web 服务来进行测试:

在部署该经纪业应用程序后,Eclipse 的 Project Explorer 窗格将显示一个名为 JSR - 109 Web Services 的节点。

请展开此节点,以显示它的两个子节点 Clients 和 Services。

接下来,请展开 Services 节点,以显示表示已部署的 Web 服务的两个子节点。

图 24. 使用 Web Services Explorer



如果尚未启动服务器,请将其启动。

右键单击 StockService,然后选择 Test with Web Services Explorer。这会显示图 25 中所示的屏幕。

图 25. Test with Web Services Explorer 屏幕



单击 Operations 下的 getStocks 链接,以显示 Actions 屏幕。

单击 Go 调用该 Web 服务。Status 窗格中将显示其输出,如图 26 所示。

图 26. Status 窗格



回页首

生成 Web 服务客户机

Eclipse WTP 还提供了使用应用服务器的 Web 运行时生成 Web 服务客户机的功能。在此应用程序中,运行时为 Apache Axis(要获取详细介绍 Axis 的链接,请参见参考资料)。下列步骤演示使用 Eclipse 生成 Web 服务客户机的过程:

选择 File > New > Project > Web > Dynamic Web Project,然后单击 Next

将项目命名为 ServiceClient,然后单击 Finish 创建项目。

在部署该经纪业应用程序后,Eclipse 的 Project Explorer 窗格将显示一个名为 JSR - 109 Web Services 的节点。

请展开此节点,以显示它的两个子节点 Clients 和 Services。

接下来,请展开 Services 节点,以显示表示已部署的 Web 服务的两个子节点。

如果尚未启动服务器,请将其启动。

右键单击 UserStockService,然后选择 Generate Client。这会显示图 27 中所示的屏幕。

图 27. Web 服务客户机



单击 BrokerageWebApp 客户机项目链接,选择 Service Client 作为客户机项目,然后单击 OK

单击 Finish。这会在 ServiceClient 项目中生成以下类:

UserStockIF


UserStockIFBindingStub


UserStockIFProxy


UserStockService


UserStockServiceLocator


现在,您可以编写使用这些类的客户机并调用
Client
类中的 Web 服务:

在提取的文件(本文已提供)中,将 client 目录中的内容导入相应的目录(例如,将 web.xml 和 geronimo-web.xml 导入 WEB-INF;将源文件导入 src;以及将 .jsp 文件导入 WebContent 目录的根目录)。

Client
类的
getUserStockIFPort
中,请创建一个
UserStockServiceLocator
实例调用,以获取指向
UserStockIFProxy
对象的句柄。接下来,请在代理上调用
getUserStocks
方法,以获取结果。

清单 7 显示了客户机的代码。

清单 7. 用于调用
Client
类中的 Web 服务的代码


package com.dev.trade.client;

import java.io.IOException;
import java.rmi.RemoteException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.rpc.ServiceException;

import com.dev.trade.service.UserStockIF;
import com.dev.trade.service.UserStockService;
import com.dev.trade.service.UserStockServiceLocator;
import com.dev.trade.service.types.Stock;

public class ClientServlet extends HttpServlet {

protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {

listUserStocks(arg0, arg1);
}

protected void doPost(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub
listUserStocks(arg0, arg1);
}

public void listUserStocks(HttpServletRequest request,
HttpServletResponse response) throws IOException {
String name = (String) request.getParameter("name");
String password = (String) request.getParameter("password");
UserStockService userStockService = (UserStockService) new UserStockServiceLocator();
UserStockIF userStockIF = null;
try {
userStockIF = userStockService.getUserStockIFPort();
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Stock[] stocks = null;
try {
stocks = userStockIF.getUserStocks(name, password);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
response.getWriter().print("<table border=\"1\" cellspacing=\"1\"><tr><td colspan
=\"4\" align=\"center\"><b>" + name + "'s Stocks</b></td></tr><tr><td><b>Id</b>
</td><td><b> Name <b></td><td><b> Price </b></td><td><b> Quantity
</b></td></tr>");

for (int i = 0; i < stocks.length; i++) {

response.getWriter().print("<tr><td>" + stocks[i].getId() + "</td><td>"
+ stocks[i].getName() + "</td><td>"
+ stocks[i].getPrice() + "</td><td>"
+ stocks[i].getQuantity() + "</td></tr>");

}

}
}

运行 Web 服务客户机

要运行 Web 服务客户机,必须按照下列步骤操作:

编译 ServiceClient 项目。

在 Servers 窗格中,右键单击服务器图标,然后选择 Add Remove Projects

选择 ServiceClient,将其添加到 Configure Projects,然后单击 Finish。现在已部署了 ServiceClient 客户机模块。

右键单击 ServiceClient,然后选择 Run on Server > Finish。这将显示 User Stocks 客户机 JSP。

请输入用户 ID
J2EE
以及密码
password
,然后单击 Submit Query 获取用户股票的清单。

图 28. 用户的股票

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐