级别: 初级 Peter Xu, 高级咨询 I/T 专家, IBM Software Service for WebSphere
2003 年 8 月 01 日 通过使用 WebSphere Studio,将您的 DB2 UDB for z/OS 存储过程转变成 Web 服务比您想象的要容易。本文将逐步指导您完成该过程。
简介
随着越来越多的人赏识 Web 服务技术给分布式计算所带来的巨大好处以及这些技术的逐渐成熟,
现在,越来越多的公司正在认真地研究他们可以怎样利用 Web 服务。
能让 Web 服务技术起作用的关键领域是使用 Web 服务来集成大型机上的信息资产,
如 IBM® DB2® Universal Database for z/OS 和 OS/390® 存储过程以及 IMS® 和 CICS® 事务。
通过这样做,您基本上可以为所有这些资产提供一个轻量级的、开放的标准接口。其好处是极大的:
在更大的业务流程中访问和集成这些传统信息资产变得容易得多。请参阅
相关信息,以获取有关 Web 服务如何有助于将旧应用程序集成到新业务流程的更多信息。
然而,实际情况是后端开发人员通常有十分过硬的 COBOL 和 PL/1 技能,
但他们可能对 Web 服务、Java 和 J2EE 方面的知识比较有限。通常,许多大型企业的确存在这种情况。
这也是阻止这些企业更快地采用 Web 服务技术的原因之一。
幸运的是,IBM 提供了工具和运行时来帮助企业后端开发人员;从而使向 Web 服务技术的转换变得更为容易。
本文的适用对象是那些对 Java 知识不太了解的开发人员。
您将学习如何为 DB2 UDB for OS/390 或 z/OS 存储过程创建 Web 服务。虽然我们集中讨论大型机存储过程,但相同的基本方法也适用于 Linux、UNIX® 和 Windows® 上的 DB2 存储过程。
在本文中,我将使用 WebSphere® Studio V5 的 Application Developer 配置。也可以使用其它 WebSphere Studio 配置来完成这些任务。
背景知识
一种名为 WORF(表示 Web 服务对象运行时框架,Web services Object Runtime Framework)的 IBM 技术提供了这样一个环境:在该环境中,
可以方便地创建访问 DB2 UDB 的基于 XML 的 Web 服务。WORF 使用 Apache 简单对象访问协议(Simple Object Access Protocol,SOAP)2.2
或更高版本和文档访问定义扩展(Document Access Definition Extension,DADX)。DADX 文档通过使用一组由 SQL 语句或 XML Extender® 文档访问定义(Document Access Definition,DAD)文档定义的操作来指定 Web 服务。在 DADX 文件中指定的在因特网上调用的 Web
服务或函数称为
DADX Web 服务,也称为 DB2 Web 服务。
图 1说明了 WORF 体系结构。
图 1. Web 服务对象运行时框架(WORF)
图 1 演示了 WORF 如何处理 Web 服务请求:服务请求。
- WORF 接收 HTTP SOAP、GET 或 POST 服务请求。
Web 服务请求的 URL 包括 Web 服务的资源文件名称和命令。
该命令要么是一个内置命令,要么指定 Web 服务的操作。
内置命令包括 TEST、WSDL 和 XML 模式文件(XSD),在这种情况下,WORF 分别生成 HTML 测试页、WSDL 文档或 XML 模式文件。
如果请求是 SOAP 请求,那么在请求主体中指定操作名。
否则,该命令是操作名。对于上述任何一种情况,WORF 都调用 Web 服务的指定操作。
- WORF 执行下列步骤来响应 Web 服务请求:
- 装入在请求中指定的 DADX 文件。
- 装入 DAD 文件(如果请求的话)。
- 用请求的值替换查询参数
- 连接到 DB2 并运行任何 SQL 语句,包括 SQL 调用。
- 提交数据库事务。
- 将结果格式化成 XML,并根据需要转换类型。
- WORF 将响应返回给服务请求程序(未在
图 1中显示)。
开始之前
我们将在桌面上从 WebSphere Studio 调用 DB2 for z/OS 存储过程。要做到这一点,我们必须先在机器上安装
DB2 UDB Application Development Client。然后需要使用 DB2 客户机配置助手(DB2 Client Configuration Assistant)来为远程 DB2 for z/OS 配置别名。有关在本地开发机器上为远程 DB2 for z/OS 数据库配置数据库别名的详细信息,请参阅
DB2 Information Center。
我们这里使用的 DB2 存储过程是用 PL/I 编写的。它将电话号码、起始日期和结束日期等作为输入参数,返回在起始和结束日期之间所进行的所有通话以及一些输出参数。
下面是该存储过程的 DDL:
清单 1. 本文中所用存储过程的 DDL
CREATE PROCEDURE SYSPROC.VAMU302(
IN APP_USER_ID CHAR(8),
IN DEBUG_LEVEL CHAR(1),
IN WTN CHAR(10),
IN DATE-START CHAR(10),
IN DATE-END CHAR(10),
IN REQUESTE-ITEM INTEGER,
OUT RETURN_CODE INTEGER,
OUT REASON_CODE CHAR(8),
OUT ERROR_TEXT VARCHAR(2000),
OUT SP_SQLCODE INTEGER,
OUT SP_SQLTOKENS CHAR(70)
OUT SP_SQLSTATE CHAR(5)
)
LANGUAGE PLI
EXTERNAL NAME VAMU302
PARAMETER STYLE GENERAL
FENCED
MODIFIES SQL DATA
NO DBINFO
COLLID USAGE_PACKAGE
WLM ENVIRONMENT VAMD38X
ASUTIME NO LIMIT
STAY RESIDENT NO
PROGRAM TYPE MAIN
SECURITY DB2
COMMIT ON RETURN YES
RESULT SETS 1
|
您还需要知道结果集的结构。在我们的示例中,它只由两列组成:
- CALL_TIMESTAMP 的类型是 TIMESTAMP
- EMI_LINE 是 VARCHAR(200)
通过使用
DB2 Stored Procedure Builder,
可以执行该过程,单击
Run,将提示您输入“输入”数据:
图 2. 输入“输入”数据
下面您将看到执行结果:
图 3. 存储过程的结果
现在,我们准备继续将该存储过程转变成 Web 服务。
通过使用 WebSphere Studio,我们可以相对容易地完成这一步。
创建企业应用程序
我们将需要一个 J2EE 企业应用程序来保存所生成的 Web 服务。
我们将使用 WebSphere Studio 来完成这一步。
- 单击
File > New > Enterprise Application Project。
- 将企业应用程序命名为
SP,它包含名为
SPWeb的 Web 应用程序。
有关创建 J2EE 应用程序的详细信息,请参阅
相关信息中的 WebSphere Studio 文档。
创建 DADX 组
- 在 Navigator 视图中,选择要在其中创建 DADX 组的 Web 项目。
- 单击
File > New > Other>
Web Services,以显示各种 Web 服务向导。
- 选择
Web Services DADX Group Configuration向导。单击
Next。
图 4. 配置 DADX
- 选择 Web 项目。单击
Add group。输入 DADX 组名
DB2SPGrp。单击
OK。
图 5. 输入 DADX 组名
- 展开 Web 项目以显示 DADX 组。选择 DADX 组。
选择
Group Properties。将 DB URL 更改成
jdbc:db2:dbname ,其中,
dbname 是数据库的名称。
还需要输入
User ID和
Password。单击
OK。
重要事项:
enableXMLClob 字段的缺省值是“true”。
还必须为
Use document style 选择“true”。这样允许对文档样式消息进行编码,
建议在使用具有多个输出参数或结果集的存储过程时这样做。有关使用文档样式的好处的详细讨论,请参阅
Reap the benefits of document style Web services一文。
图 6. 输入 DADX 组特性
- 单击
Finish。DADX 组生成在
WebProject\\Java Source\\groups
中,
工作空间应该类似于:
图 7. 添加了新的 DADX 组
创建 DADX 文件
WebSphere Studio 提供了为 SQL 查询(选择、更新和删除)创建 DADX 文件的工具。
对于存储过程,必须手工创建 DADX 文件。幸运的是,DADX 语法非常容易理解,可以使用任何文本编辑器来创建它。
在 DADX 组(
WebProject\\Java Source\\groups\\DADXGroup
,其中,DADXGroup 是刚才在上述步骤中创建的组)中创建或导入 DADX 文件。
图 8显示了上面讨论的存储过程的 DADX 文件。
图 8. 样本 DADX 文件
让我们仔细研究
图 8 中的 DADX 文件,看一下它是如何映射到存储过程的。
- 象任何标准的 XML 文件一样,DADX 文件从指定名称空间开始。
然后,可以有一个可选的文档元素,它说明有关该 DADX 文件的情况。
-
接着是 result_set_metadata 元素。在一个 DADX 文件中,可以指定 0 到 n 个这样的 result_set_metadata 元素。这些元素是稍后可在各种操作中引用的全局元素。指定 result_set_metadata 时,
给它起个名称(callInfo),并将每一列与其对应的 SQL 类型相匹配。
-
然后是
operation 元素。一个 DADX 文件可以有多个 operation,每个 operation 都有一个逻辑名(在我们的示例中是 VAMU302)并表示一个存储过程调用或一个 SQL 查询。对于存储过程,从 <SQL_CALL> 节开始,
指定实际的存储过程名(SYSPROC.VAMU302)和所有参数,包括输入和输出,
其顺序与在存储过程 DDL 中定义的一致。继续将每个参数映射到 XSD 类型。
最后,需要通过引用我们已经在上面定义的结果集(callInfo)来指定结果集。
这就是将存储过程(及其结果集)映射到 DADX 操作所需的所有步骤。
在代码生成过程期间,DADX 文件将被转换成 WebSphere 描述语言(WebSphere Description Language,WSDL)文件来表示存储过程 Web 服务。
有关 DADX 文件的准确语法和 XML 模式,请参阅
相关信息中的文档。
根据 DADX 文件创建 Web 服务
- 单击
File > New > Other。选择
Web Services,以显示各种 Web 服务向导。
选择
Web Service向导。单击
Next。
图 9. 创建新的 Web 服务
- 请遵循该向导中的指示信息来配置 DADX Web 服务。
在该向导的 Web Services 页上,为 Web 服务类型选择
DADX Web Service。另外还要选择
Generate a proxy。单击
Next。
图 10. 指定 DADX Web 服务
- 在 Web Service Deployment Settings 页上,只需保留缺省设置,然后单击
Next。
图 11. 对于部署选项选择缺省值
- 在 DADX 文件选择的页面上,浏览至 DADX 文件,然后单击
OK和
Next。
图 12. 选择 DADX 文件
- 在 Web Service DADX Group properties 页上,使一切保持原样,因为我们已经定义了所有特性。
图 13. DADX 组特性
- 在 Web Service Binding Proxy Generation 页上,选择
soap binding,然后单击
Next。
图 14. 选择 SOAP 绑定
- 在该测试页上,选中
Test the generated proxy 框。这会创建一个简单的 Web 应用程序,
该应用程序使用生成的代理来调用我们的存储过程 Web 服务。单击
Finish,等待代码生成过程结束。
图 15. 生成测试代理
测试 Web 服务
- 生成代码之后,WebSphere 测试环境服务器将自动启动并装入测试应用程序,如
图 16 所示。
图 16. 测试应用程序
- 在 Methods 窗格中,选择我们将进行测试的方法,并填充所有必需的参数。
单击
Invoke 时,将调用 Web 服务,然后在浏览器中显示来自该服务的响应。
这时在幕后发生的事情是调用了服务器的 JSP 页。该 JSP 页是 Web 服务客户机,它使用 Web 服务代理来访问实际的存储过程 Web 服务。
该代理还在 Java 对象和 XML 之间进行序列化和反序列化。当代理调用返回时,JSP 页显示如
图 17 中所示的结果。
图 17. Web 服务的结果
- 如果您真的想要知道数据如何在线路中流动,则可以在 WebSphere Studio 内配置 TCP/IP Monitoring Server 以查看在 SOAP 消息中传送的请求和响应。
首先,确保您正在实际进行 Web 服务调用。下面是我们对上面所进行的 SOAP 调用的抓屏:
图 18. 查看 SOAP 消息
祝贺您!现在,您已经在 WebSphere Studio 中成功地构建并测试了一个存储过程 Web 服务。
您可以容易地封装它,然后部署它以在 WebSphere Application Server 中运行。
结束语
WORF 和 DADX 是功能强大的技术,它们可以使 DB2 存储过程变成 Web 服务,WebSphere Studio 提供了极佳的工具来帮助我们快速完成这一转换。正如您在本教程中所见到的那样,所需的编程工作极少。
通过使用该工具,缺少 Java 和 JDBC 经验的后端开发人员可以在几分钟内将 DB2 存储过程转变成 Web 服务。
这的确很令人激动,因为它开启了并且可能彻底改变访问和重用大型机上的 DB2 存储过程的方法。
致谢
作者要感谢 Arthur Ryman 和 Dirk Wollscheid 对本文的评审,并提供了有价值的建议和文稿。
相关信息
DB2 Web 服务:
WebSphere Studio:
关于作者  | 
|  |
Peter Xu 是 IBM Software Services for WebSphere 小组的一名高级顾问。Software Services for WebSphere
小组的顾问帮助客户将 IBM 产品部署到他们的机构中。Peter 为“财富 500 强”客户提供有关 J2EE 技术(尤其是 WebSphere 和 WebSphere Studio 产品)方面的咨询服务、培训和指导。
可以通过
peteryxu@us.ibm.com与他联系。
|
对本文的评价
|