当前位置:IT教程网教程中心其他整理WebSphere → 教程内容

DB2 UDB for OS/390 存储过程创建 Web 服务

减小字体 增大字体 作者:佚名  来源:不详  发布时间:2007-1-8 17:39:00
Peter Xu
高级咨询 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 体系结构

图 1 演示了 WORF 如何处理 Web 服务请求:服务请求。
  1. WORF 接收 HTTP SOAP、GET 或 POST 服务请求。

    Web 服务请求的 URL 包括 Web 服务的资源文件名称和命令。该命令要么是一个内置命令,要么指定 Web 服务的操作。内置命令包括 TEST、WSDL 和 XML 模式文件(XSD),在这种情况下,WORF 分别生成 HTML 测试页、WSDL 文档或 XML 模式文件。如果请求是 SOAP 请求,那么在请求主体中指定操作名。否则,该命令是操作名。对于上述任何一种情况,WORF 都调用 Web 服务的指定操作。

  2. WORF 执行下列步骤来响应 Web 服务请求:
    1. 装入在请求中指定的 DADX 文件。
    2. 装入 DAD 文件(如果请求的话)。
    3. 用请求的值替换查询参数
    4. 连接到 DB2 并运行任何 SQL 语句,包括 SQL 调用。
    5. 提交数据库事务。
    6. 将结果格式化成 XML,并根据需要转换类型。
  3. 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 来完成这一步。

  1. 单击 File > New > Enterprise Application Project
  2. 将企业应用程序命名为 SP,它包含名为 SPWeb的 Web 应用程序。

有关创建 J2EE 应用程序的详细信息,请参阅 相关信息中的 WebSphere Studio 文档。

创建 DADX 组

  1. 在 Navigator 视图中,选择要在其中创建 DADX 组的 Web 项目。
  2. 单击 File > New > Other> Web Services,以显示各种 Web 服务向导。
  3. 选择 Web Services DADX Group Configuration向导。单击 Next

    图 4. 配置 DADX
    配置 DADX

  4. 选择 Web 项目。单击 Add group。输入 DADX 组名 DB2SPGrp。单击 OK

    图 5. 输入 DADX 组名
    dadx 组名

  5. 展开 Web 项目以显示 DADX 组。选择 DADX 组。选择 Group Properties。将 DB URL 更改成 jdbc:db2:dbname ,其中, dbname 是数据库的名称。还需要输入 User IDPassword。单击 OK

    重要事项: enableXMLClob 字段的缺省值是“true”。还必须为 Use document style 选择“true”。这样允许对文档样式消息进行编码,建议在使用具有多个输出参数或结果集的存储过程时这样做。有关使用文档样式的好处的详细讨论,请参阅 Reap the benefits of document style Web services一文。

    图 6. 输入 DADX 组特性
    DADX 组特性

  6. 单击 Finish。DADX 组生成在 WebProject\\Java Source\\groups 中,工作空间应该类似于:

    图 7. 添加了新的 DADX 组
    导航显示了新的 dadx 组

创建 DADX 文件
WebSphere Studio 提供了为 SQL 查询(选择、更新和删除)创建 DADX 文件的工具。对于存储过程,必须手工创建 DADX 文件。幸运的是,DADX 语法非常容易理解,可以使用任何文本编辑器来创建它。在 DADX 组( WebProject\\Java Source\\groups\\DADXGroup ,其中,DADXGroup 是刚才在上述步骤中创建的组)中创建或导入 DADX 文件。 图 8显示了上面讨论的存储过程的 DADX 文件。

图 8. 样本 DADX 文件
样本 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 服务

  1. 单击 File > New > Other。选择 Web Services,以显示各种 Web 服务向导。选择 Web Service向导。单击 Next

    图 9. 创建新的 Web 服务
    创建 Web 服务

  2. 请遵循该向导中的指示信息来配置 DADX Web 服务。在该向导的 Web Services 页上,为 Web 服务类型选择 DADX Web Service。另外还要选择 Generate a proxy。单击 Next

    图 10. 指定 DADX Web 服务

  3. 在 Web Service Deployment Settings 页上,只需保留缺省设置,然后单击 Next

    图 11. 对于部署选项选择缺省值
    选择部署选项

  4. 在 DADX 文件选择的页面上,浏览至 DADX 文件,然后单击 OKNext

    图 12. 选择 DADX 文件
    查找 DADX

  5. 在 Web Service DADX Group properties 页上,使一切保持原样,因为我们已经定义了所有特性。

    图 13. DADX 组特性

  6. 在 Web Service Binding Proxy Generation 页上,选择 soap binding,然后单击 Next

    图 14. 选择 SOAP 绑定
    生成代理

  7. 在该测试页上,选中 Test the generated proxy 框。这会创建一个简单的 Web 应用程序,该应用程序使用生成的代理来调用我们的存储过程 Web 服务。单击 Finish,等待代码生成过程结束。

    图 15. 生成测试代理
    测试代理

测试 Web 服务

  1. 生成代码之后,WebSphere 测试环境服务器将自动启动并装入测试应用程序,如 图 16 所示。

    图 16. 测试应用程序
    测试环境

  2. 在 Methods 窗格中,选择我们将进行测试的方法,并填充所有必需的参数。单击 Invoke 时,将调用 Web 服务,然后在浏览器中显示来自该服务的响应。这时在幕后发生的事情是调用了服务器的 JSP 页。该 JSP 页是 Web 服务客户机,它使用 Web 服务代理来访问实际的存储过程 Web 服务。该代理还在 Java 对象和 XML 之间进行序列化和反序列化。当代理调用返回时,JSP 页显示如 图 17 中所示的结果。

    图 17. Web 服务的结果
    Web 服务的数据结果

  3. 如果您真的想要知道数据如何在线路中流动,则可以在 WebSphere Studio 内配置 TCP/IP Monitoring Server 以查看在 SOAP 消息中传送的请求和响应。首先,确保您正在实际进行 Web 服务调用。下面是我们对上面所进行的 SOAP 调用的抓屏:

    图 18. 查看 SOAP 消息
    soap 消息

祝贺您!现在,您已经在 WebSphere Studio 中成功地构建并测试了一个存储过程 Web 服务。您可以容易地封装它,然后部署它以在 WebSphere Application Server 中运行。

结束语
WORF 和 DADX 是功能强大的技术,它们可以使 DB2 存储过程变成 Web 服务,WebSphere Studio 提供了极佳的工具来帮助我们快速完成这一转换。正如您在本教程中所见到的那样,所需的编程工作极少。通过使用该工具,缺少 Java 和 JDBC 经验的后端开发人员可以在几分钟内将 DB2 存储过程转变成 Web 服务。这的确很令人激动,因为它开启了并且可能彻底改变访问和重用大型机上的 DB2 存储过程的方法。

广告位置