DB2 for z/OS 上的 Data Web Services,第 1 部分: 使用 DB2 for z/OS 存储过程和 Data Web Services 公开业务功能
2010-02-05 00:00:00 来源:WEB开发网概述
本文讨论 DB2 for z/OS 存储过程以及把它们包装在 Web 服务中的好处。讨论如何使用 IBM Data Studio Developer 创建和部署使用 Data Web Services 特性的 Web 服务。还讨论如何使用 XSLT 样式表处理把 Web 服务的 XML 响应转换为基于 HTML 的 Web 浏览器交互。
本文是两篇系列文章的第一篇。第 2 部分讨论如何使用 DB2 for z/OS 用户定义函数 (UDF) 把 z/OS 数据集和 UNIX® System Services (USS) 文件信息解释成 Data Web Services 操作。
前提条件
本文假设您知道什么是 IBM Data Web Services,熟悉使用 IBM Data Studio Developer 创建、测试和部署 IBM Data Web Services 的基本过程。
另外,如果先下载并提取 下载 中的 AccountInquiry.zip 文件中的源代码,会对学习本文有帮助。
存储过程简介
存储过程常常用来整合和集中那些原来在应用程序中实现的逻辑。需要执行多个 SQL 语句的大型或复杂的处理可以转移到服务器端存储过程中,从而向企业应用程序提供集中的接口。
DB2 for z/OS 支持以下存储过程类型:
SQL 过程(外部和本机)
外部过程(用 C、COBOL、PL/I 或 Java® 等编程语言编写)
SQL 过程是完全用 SQL 编写的,可以通过 SQL 操作访问 DB2 资源。不能从 SQL 过程访问非 DB2 资源。
外部 DB2 for z/OS 存储过程是服务器端应用程序,可以用不同的编程语言编写,包括 COBOL。存储过程程序可以访问 DB2 数据和传统的非 DB2 资源,比如 QSAM 和 VSAM 数据集、消息队列、CICS 程序、IMS 事务和数据库。另外,外部存储过程程序可以以子程序形式调用现有的应用程序,从而重用现有的业务逻辑。
其他存储过程以及使用嵌入式 SQL、.NET、ODBC 或 Java 的 DB2 客户机应用程序可以调用存储过程。z/OS 外部存储过程运行时环境由 z/OS Workload Manager (WLM) 管理。
使用存储过程的好处
自从 DB2 for z/OS 中引入存储过程以来,存储过程已经发展成一种成熟健壮的技术,许多组织使用它们处理大量事务性工作负载。使用存储过程常见的原因包括:
提高远程客户机的网络性能
如果客户机/服务器应用程序发出多个远程 SQL 语句,那么发送语句和接收结果的网络开销可能相当大。存储过程可以封装多个 SQL 语句,有助于避免网络往返。
保护对数据的访问
如果存储过程包含嵌入式静态 SQL,客户机只需要有执行这个存储过程的特权。不需要访问底层 DB2 表的特权,因此降低了风险。
简化开发和维护
使用存储过程有助于降低客户机对数据库设计的依赖性。
访问非 DB2 数据
与在 z/OS 环境中执行的其他应用程序一样,用 COBOL、PL/I、C++ 或 Java 编写的外部存储过程可以访问非 DB2 资源。例如,客户机应用程序可以使用 SQL 和结果集逻辑把 VSAM 或 IMS 数据读取到全局或声明的临时表中,然后处理它们。
提高可用性和可重用性
外部 DB2 for z/OS 存储过程由 z/OS Workload Manager (WLM) 管理,因此可以提供可伸缩性和可用性。存储过程代码集中地存储在数据库服务器上,这有助于代码重用。可以通过 DB2 for z/OS 和 WLM 接口应用存储过程更改,而不会影响服务的可用性。
封装业务功能
常常使用外部存储过程访问遗留数据存储和遗留应用程序系统。它们封装业务逻辑和 SQL 语句,访问非 DB2 资源,满足安全策略的要求,通过以子程序形式调用现有模块来重用业务逻辑,可选地把结果集返回给客户机应用程序。本文中描述的场景主要展示这个好处。
使用 Web 服务访问存储过程中封装的业务功能
封装了业务功能的 DB2 for z/OS 存储过程很适合在 Data Web Services 中重用。它们提供可重用的服务,以可控的方式公开现有系统的功能。例如,服务接口(SOA 中最关键的组件)已经存在了(尽管不是 Web 服务接口的形式),不同部门和业务线中的企业应用程序正在使用它们。底层数据的质量分析已经成功地完成了。对于现有的存储过程,代码已经开发完成并经过测试,它们已经成为 IT 基础结构的一部分,能够满足现有服务水平协议 (SLA) 的要求。使用 Web 服务接口公开这些存储过程,让更多的应用程序可以使用它们。
一个现有的示例业务场景
为了说明 DB2 for z/OS 存储过程的价值和使用方法,本文以一个现有的示例业务场景为例,它提供三个银行应用程序:Call Center、Bank Branch 和 Internet Banking。这些应用程序使用下面的 DB2 for z/OS 存储过程中封装的业务功能:
ListCustomer
AccountSummary
AccountDetail
图 1 说明每个银行应用程序使用这些存储过程的方法。
图 1. 现有的 AccountInquiry 存储过程
Call Center 和 Bank Branch 应用程序调用存储过程 1、2 和 3,分别获取客户号、账户号和详细的账户信息。Internet Banking 应用程序只调用存储过程 2 和 3,因为客户在进行身份验证时会提供客户号。
客户端应用程序代码调用存储过程,把客户名、客户号和账户号链接起来并显示数据。存储过程类型和编程语言对于客户机是透明的。
本文中的示例使用 DB2 9 for z/OS 本机 SQL 过程访问 DB2 表中存储的银行信息。您可能会问,为什么要使用存储过程?为什么不直接使用 SQL 查询提供相同的信息?正如前面提到的,存储过程有许多好处。在这个场景中,有以下好处:
SQL 存储过程已经存在了,它们是可重用的资产。
存储过程让客户机应用程序不依赖于底层数据库设计,降低了客户机的复杂性,把复杂的逻辑封装在数据库层中。
在其他场景中,由于 IT 基础结构的复杂性,可能需要使用外部 存储过程。例如,存储过程可能必须与远程后端系统通信,从 CICS 程序、IMS 数据库和事务获取信息;甚至必须通过 WebSphere® MQ 与非 IBM 平台通信。
下面详细介绍这个示例业务场景使用的存储过程的输入和输出接口。
ListCustomer
ListCustomer 存储过程提供与客户名、客户号和生日匹配的客户的列表(见图 2)。
图 2. ListCustom 输入和输出接口
查看原图(大图)
AccountSummary
AccountSummary 存储过程获取给定的客户号的银行账户列表(见图 3)。
图 3. AccountSummary 输入和输出接口
查看原图(大图)
AccountDetail
AccountDetail 存储过程获取给定的客户号的详细账户状态信息(见图 4)。
图 4. AccountDetail 输入和输出接口
查看原图(大图)
示例业务场景与 IBM Data Web Services
本节描述一个示例 Data Web Services 运行时环境,解释如何通过简便的鼠标操作以 Web 服务形式公开存储过程。仅仅作为 Data Web Services 公开存储过程还不足以向客户端应用程序提供在业务上下文中运行这些 Web 服务所需的逻辑。因此,本文还讨论如何使用 XSLT 样式表把部署的 AccountInquiry Data Web Service 转换为基于 HTML 的 Web 应用程序。
IBM Data Web Service 运行时环境
图 5 说明这个示例 Data Web Service (DWS) 运行时环境。它使用:
WebSphere Application Server for z/OS Version 6.1 (WAS) 作为 J2EE 应用服务器来驻留 AccountInquiry Web 服务。IBM DWS 运行时环境(包括通用的 DWS servlet)是 AccountInquiry DWS 的固有部分。不需要执行任何其他 WAS 实现步骤。
DB2 9 for z/OS 作为数据库服务器。
在测试 Web 服务方面,可以使用以下任何方法:
IBM Data Studio Developer(具体地说,是 Data Web Services Explorer)
DB2 for z/OS SOAP UDFs,作为驱动 Data Web Services 请求的客户机接口
使用 Web 浏览器的测试客户机
可以调用 Web 服务的任何客户机
图 5. IBM Data Web Services (DWS) 运行时环境概况
查看原图(大图)
图 5 所示的场景在 WebSphere Application Server 中以 J2EE 应用程序的形式部署一个名为 AccountInquiry 的 Data Web Services。对于 Web 服务调用,可以选用三个 Web 服务消费者应用程序之一:DB2 for z/OS SOAP UDFs、Data Web Service Test Client 和 Data Studio Web Services Explorer。在这个示例场景中,使用 DB2 for z/OS SOAP UDFs 作为 Web 服务客户机。
下面概述图 5 所示的 Data Web Services 运行时环境的处理流:
Web 服务客户机发出 SOAP/HTTP 请求,要求使用 Web 服务。
WebSphere Application Server(实现 SOAP 端点)接收 SOAP 请求并把控制传递给 IBM Data Web Services 运行时环境。
Data Web Services 通用 Servlet 把 SOAP 操作转换为数据库操作,使用 JDBC 发出相应的 SQL 请求。
根据 J2EE 和 DB2 基础结构实现,JNDI 数据源定义使用 JDBC type 2 或 JDBC type 4 连接数据库。
XML 编码的输出消息返回给 Web 服务客户机应用程序。
作为 Data Web Services 公开现有的存储过程
用 IBM Data Studio 创建 AccountInquiry Data Web Services
IBM Data Web Service 的创建和部署完全集成在 IBM Data Studio Developer 中,因此可以通过简便的鼠标操作开发 Web 服务。本节描述如何使用 Data Studio Developer 以 Web 服务形式公开现有的 DB2 for z/OS 存储过程。更详细的信息请参见 IBM Data Studio V2.1: Getting Started with Web Services on DB2 for z/iOS。
设置到 DB2 for z/OS 数据库服务器的连接。
图 6. 设置数据库连接
查看原图(大图)
建立到数据库服务器的连接。
图 7. 建立数据库连接
查看原图(大图)
使用 Data Source Explorer 列出希望使用的存储过程。
图 8. 列出存储过程
查看原图(大图)
使用 Data Project Explorer -> New -> Data Development Project 创建 Data_Account_Inquiry 项目。
图 9. 创建 Data_AccountInquiry 项目
使用 Data Project Explorer -> Web Services -> 右键单击 -> New
,创建 AccountInquiry Data Web Service 项目。
图 10. 创建 AccountInquiry DWS 项目
把要作为 SOAP 操作公开的存储过程拖放到 AccountInquiry Data Web Service 项目中。
图 11. 拖放存储过程
成功地完成拖放操作之后,会在 Data Project Explorer -> Data_Account_Inquiry -> Web Services -> AccountInquiry 中看到作为 Web 服务操作列出的存储过程。Web 服务名后面的星号 (*) 表示这个 Web 服务还没有构建。
图 12. DWS AccountInquiry 操作
在 AccountInquiry Web 服务项目中,双击 LISTCUSTOMER,显示在 Web 服务 AccountInquiry 执行 LISTCUSTOMER 操作时将执行的存储过程 SQL CALL 语句。可以通过双击 ACCOUNTDETAIL 和 ACCOUNTSUMMARY 操作显示另两个 Web 服务操作的 SQL CALL 语句。
图 13. ListCustomer 操作的 SQL CALL 语句
构建 Web Application Archive (WAR) 文件
可以在 Data Studio 中执行以下操作创建 Web Application Archive 文件:
在创建 Data Web Service 之后,构建可以在 WebSphere Application Server for z/OS 上作为 J2EE 应用程序安装的 Web Application Archive (WAR) 文件。这需要选择 Data Project Explorer -> Data_Account_Inquiry -> Web Services -> AccountInquiry -> 右键单击 -> Build and Deploy,见图 14。
图 14. 构建 WAR 文件
在 Deploy Web Service 屏幕上,指定 Web 服务器目标环境,指定应该在 WAR 文件创建过程中包含 Data Web Service 测试客户机应用程序。Data Web Services 测试客户机应用程序非常有用,它提供一个用来测试 Web 服务操作的 Web 浏览器界面。对于数据处理程序,还可以通过 pureQuery 在 DB2 中使用静态 SQL,这可以提高性能和安全性并简化数据库管理。
图 15. 指定 WAR 文件参数
查看原图(大图)
单击 Finish 创建 WAR 文件。
在 Navigator 选项卡上,选择 Data_Account_Inquiry -> DataServerWebServices -> AccountInquiry -> Data_Account_InquiryAccountInquiry.war。然后,右键单击 Properties,指定 WAR 文件的位置。在 WebSphere Application Server for z/OS 中安装应用程序时需要 WAR 文件位置信息。
图 16. WAR 文件位置
在 WebSphere Application Server for z/OS 中安装 Data Web Service
本文并不详细讨论如何使用 WebSphere Application Server Integrated Solution Console (ISC);只讨论如何安装 Data Web Services。关于 WebSphere Application Server for z/OS 配置和 Data Web Services 安装的更多信息,请参考 DB2 9 for z/OS: Deploying SOA Solutions 的 7.7 章 Setting up WebSphere Application Server。
按以下步骤使用 Integrated Solution Console (ISC) 安装 AccountInquiry Web 服务:
定义用来连接 DB2 for z/OS 数据库服务器的 JNDI 数据源。这个示例场景使用下面的 JNDI 数据源属性:
Provider: DB2 Universal JDBC Driver Provider
Name: DBLN
JNDI Name: jdbc/DBLN
DB2 Location Name: RDBNDBLN
DB2 TCP/IP Port: 446
JDBC Type 4
Server Name: ZNTC
在 WebSphere Application Server ISC 中执行以下操作:
选择 Applications -> Install New Application 上传 Data Studio 生成的 WAR 文件(见图 16),以便作为 J2EE 应用程序安装 Data Web Service。
选择 Enterprise Applications -> Applications -> Start 启动这个新的 J2EE 应用程序。
成功地启动应用程序之后,AccountInquiry Data Web Service 就可以处理 Web 服务请求了。
测试 AccountInquiry Data Web Service
在 WebSphere Application Server 中实现 AccountInquiry DWS 之后,客户机应用程序就可以使用这个 Web 服务了。DB2 for z/OS 和 Data Studio Developer 提供 Web 服务客户机应用程序,可以使用它们通过 SOAP/HTTP 消费 Web 服务。
可用的客户机应用程序包括:
DB2 for z/OS SOAP/HTTP User Defined Functions (SOAP UDFs)
Data Studio Web Services Explorer
Data Web Service Test Client
关于 DB2 for z/OS 和 Data Studio 提供的 Web 服务客户机应用程序的更多信息,请参考 DB2 9 for z/OS: Deploying SOA Solutions。
这个示例场景使用 DB2 for z/OS SOAP UDFs 从 SQL 调用 AccountInquiry Web 服务操作。在使用 DB2 for z/OS SOAP UDFs 之前,需要在 DB2 for z/OS 中完成几个定制步骤。关于这些定制步骤和其他 SOAP/HTTP UDF 使用场景的详细信息,请参考 DB2 9 for z/OS: Deploying SOA Solutions 的第 8 章 “DB2 as a Web services consumer with SOAP UDFs: Scenario 3”。
ListCustomer
图 17 给出调用 ListCustomer Data Web Service 操作的 SQL 语句。
图 17. 通过 SOAP UDF 调用 ListCustomer Data Web Service 操作
查看原图(大图)
这个 SQL 语句向 DB2 SOAP UDF 程序传递三个输入参数:SOAP 端点 (P1)、SOAP 操作 (P2) 和 SOAP 请求文档 (P3)。DB2 SOAP UDF 程序使用这些输入参数代表 SQL 客户机发出一个 SOAP/HTTP 请求。当 SOAP/HTTP 请求处理完成时,SOAP 响应文档作为 VARCHAR SQL 标量值返回给 SQL 客户机,见图 18。
图 18. ListCustomer SOAP UDF VARCHAR 输出
把 VARCHAR 数据(图 18)存储在一个 Data Studio XML 文档中。选择 Data Project Explorer -> Data_Account_Inquiry ->XML -> XML Documents -> ListCustomer -> 右键单击 -> Source -> Format,对 SOAP XML 响应文档进行格式化(见图 19)。
图 19. 格式化的 ListCustomer SOAP 响应 XML 文档
查看原图(大图)
如图 19 所示,ListCustomer DWS 返回了两个符合条件的客户的信息。
AccountSummary 和 AccountDetail
对 AccountSummary 和 AccountDetail DWS 操作重复刚才执行的步骤。AccountSummary 的 SQL SOAP UDF 查询见图 20。AccountDetail 的 SQL SOAP UDF 查询见图 21。
图 20. AccountSummary SOAP UDF 查询
查看原图(大图)
图 21. AccountDetail SOAP UDF 查询
查看原图(大图)
XSLT 样式表:把 DWS 转换为基于 HTML 的 Web 应用程序
在本节中,学习如何使用 XSLT 样式表把 AccountInquiry DWS 转换为基于 HTML 的 Web 浏览器应用程序,这个程序使用 HTML 超链接提供向下钻取功能。
背景知识
eXtensible Style Sheet Transformation (XSLT) 语言可以把一个 XML 文档的树转换为不同的结果树。在本文的示例场景中,AccountInquiry Data Web Service 响应是一个 XML 消息,可以使用 XSLT 把它转换为 HTML 格式。这样就可以通过 Web 浏览器直接调用 AccountInquiry Web 服务操作,接收 HTML 格式的响应。
目标运行时环境
图 22 描述一个把 AccountInquiry Web 服务部署为 J2EE 应用程序的场景。部署包含 XML-to-HTML 输出转换规则,这允许用户像一般的基于 HTML 的应用程序一样从 Web 浏览器调用 Web 服务。
图 22. 包含 XSLT 处理的 DWS 运行时环境
查看原图(大图)
处理流的主要步骤如下:
Web 服务客户机发出一个 REST 风格的 HTTP RPC 请求,要求使用 Web 服务。
WebSphere Application Server(实现 HTTP RPC 端点)接收 HTTP GET 请求并把控制传递给 Data Web Services 运行时环境。
Data Web Service 通用 Servlet 把 HTTP RPC 操作转换为数据库操作,使用 JDBC 发出相应的 SQL 请求。
根据 J2EE 和 DB2 基础结构实现,JNDI 数据源定义使用 JDBC type 2 或 JDBC type 4 连接数据库。
因为使用了 XSLT 消息输出转换,XML 响应消息被转换为 HTML 格式,然后返回给 Web 浏览器。
XSLT 样式表
下载 中的源代码包含三个 XSLT 样式表,它们分别针对一个 AccountInquiry 操作。XSLT 使用 HTML 超链接 (href) 提供从 ListCustomer 到 AccountSummary 和从 AccountSummary 到 AccountDetail 的向下钻取功能。下面给出用于 XML-to-HTML 转换的 XSLT 样式表、要转换的 Web 服务 XML 响应文档和转换后的 HTML 文档:
ListCustomer 响应的 XML-to-HTML 输出转换
图 23. ListCustomer HTML 转换
查看原图(大图)
图 24. ListCustomer XML 响应
查看原图(大图)
图 25. ListCustomer XSLT 转换后的 HTML
查看原图(大图)
AccountSummary 响应的 XML-to-HTML 输出转换
图 26. AccountSummary HTML 转换
查看原图(大图)
图 27. AccountSummary XML 响应
查看原图(大图)
图 28. AccountSummary XSLT 转换后的 HTML
查看原图(大图)
AccountDetail 响应的 XML-to-HTML 输出转换
图 29. AccountDetail HTML 转换
查看原图(大图)
图 30. AccountDetail XML 响应
查看原图(大图)
图 31. AccountDetail XSLT 转换后的 HTML
查看原图(大图)
把样式表分配给 Data Web Service 操作
现在,把每个样式表连接到相应的 Web 服务操作,见表 1。
表 1. 把样式表分配给 DWS 操作
Web 服务操作 | 样式表文件名 |
ListCustomer | ListCustomertoHTML.xsl |
AccountSummary | AccountSummarytoHTML.xsl |
AccountDetail | AccountDetailtoHTML.xsl |
为了实现上面的样式表分配,对每个 Web 服务操作执行以下步骤:
在 Data Project Explorer 中,右键单击 Web 服务操作并选择 Manage XSLT(图 32)。
图 32. 管理 Web 服务操作的 XSLT
在 Configure XSL 屏幕(见图 33)上,选择适当的文件并单击 Finish。XSLT 文档现在与适当的 Web 服务操作关联起来了。
图 33. 把样式表与输出消息关联起来
查看原图(大图)
为了启用 XSLT 样式表转换,需要重新部署 Data Web Service J2EE 应用程序。这需要按照 构建 Web Application Archive (WAR) 文件 和 在 WAS for z/OS 中安装 Data Web Service 中的步骤在 Data Studio 中重新构建 WAR 文件和重新安装 J2EE 应用程序。
运行基于 HTML 的 Web 服务应用程序
在 WebSphere Application Server 中成功地安装 AccountInquiry 应用程序之后,它将使用 XSLT 输出消息转换。Web 服务输出消息将转换为 HTML 格式。这使 Web 浏览器应用程序可以使用 REST 风格的 HTTP RPC 请求与 AccountInquiry Web 服务交互。
可以使用 REST 风格的 http URL 调用 ListCustomer Web 服务操作。URL 中的特殊字符必须采用 URL 编码形式。调用返回基于 HTML 的 Web 页面,见图 34。
图 34. ListCustomer XSLT 转换后的 HTML Web 页面
查看原图(大图)
在图 34 所示的浏览器窗口中,单击客户号 36505633552 即可显示这位客户的账户汇总信息(见图 35)。
图 35. AccountSummary XSLT 转换后的 HTML Web 页面
在图 35 所示的浏览器窗口中,单击账户号 9000000002 即可显示这个账户的详细信息(见图 36)。
图 36. AccountDetail XSLT 转换后的 HTML Web 页面
结束语
通过使用 IBM Data Web Services,只需简单的鼠标操作就能以 Web 服务的形式公开现有的 DB2 for z/OS 存储过程。这样,现有的 DB2 for z/OS 存储过程就可以成为面向服务体系结构 (SOA) 中重要的可重用资产。没有 Java 经验的后端开发人员也能够把现有的存储过程转换为 Web 服务(不需要编程)。另外,XSLT 样式表提供了新的应用程序开发方式。XSLT 输出消息转换可以把 IBM Data Web Services 转换为成熟的基于 HTML 的 Web 浏览器应用程序,不需要编写任何应用程序代码。
本系列的第 2 部分将讨论如何使用 DB2 for z/OS 用户定义函数把 z/OS 数据集和 USS 文件信息与 Data Web Services 操作集成起来。
本文示例源代码或素材下载
- ››FOREACH 宏之GCC实现
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 基础: 表空间和缓冲池
- ››DB2 XML 编程,第 1 部分: 理解 XML 数据模型
- ››DB2 pureScale 实战
- ››DB2 存储过程中如何使用 Optimization Profile
- ››DB2 pureScale 新特性 -- Member Restart
- ››DB2 Express-C 9.7.2 新增特性
- ››DB2 9.7 新特性 - 内联 LOB 的使用
赞助商链接