IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Information Management  >

使用 WebSphere Studio V5 为 DB2 UDB for OS/390 存储过程创建 Web 服务

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 初级

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)
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 存储过程的方法。





回页首


致谢

作者要感谢 Arthur Ryman 和 Dirk Wollscheid 对本文的评审,并提供了有价值的建议和文稿。





回页首


相关信息

DB2 Web 服务:

WebSphere Studio:



关于作者

照片:Peter Xu

Peter Xu 是 IBM Software Services for WebSphere 小组的一名高级顾问。Software Services for WebSphere 小组的顾问帮助客户将 IBM 产品部署到他们的机构中。Peter 为“财富 500 强”客户提供有关 J2EE 技术(尤其是 WebSphere 和 WebSphere Studio 产品)方面的咨询服务、培训和指导。 可以通过 peteryxu@us.ibm.com与他联系。




对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款