- ·上一篇教程:为 DB2 UDB 系列配置数据源
- ·下一篇教程:专家访谈: Dan Wolfson
DB2 UDB for OS/390 存储过程创建 Web 服务
高级咨询 I/T 专家, IBM Software Service for WebSphere
2003 年 8 月
通过使用 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)
- 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
|
您还需要知道结果集的结构。在我们的示例中,它只由两列组成:
- 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 存储过程的方法。





