DB2 Web 服务: 蓝图
2008-12-09 16:33:56 来源:WEB开发网DB2 应用程序开发概述
用户可以通过下面两种方式访问关系数据库(relational database,RDBMS)中的数据:
直接使用结构化查询语言(Structured Query Language,SQL)存取数据
使用应用程序接口,允许最终用户通过图形用户界面(graphical user interface,GUI)来调用SQL语句进行数据存取,用户不需要知道具体的SQL命令。
现在大多数 DB2 应用程序都是使用 GUI 接口,对最终用户隐藏了数据访问细节。
应用程序开发人员都需要学习某种与语言相关的技术来访问 DB2 数据。例如,Cobol 程序员在他们的应用程序中嵌入 SQL 语句,然后使用预处理器将标记过的 SQL 语句转换成与 DB2 服务器交互的Cobol函数调用。目前,对于 C 程序员,有许多可供选择的数据库访问技术,其中包括嵌入式 SQL、调用层接口(Call Level Interface,CLI)、ODBC、ADO、OLE-DB 和 ADO.Net。
Java™ 程序员目前可以使用 JDBC 和 SQLj 作为直接访问 DB2 的数据库接口。JDBC™ 接口已经作为语言的一部分被定义在Java 2 标准版(Java 2 Standard Edition,J2SE)当中。Java 2 企业版(Java 2 Enterprise Edition,J2EE)为构建分布式 Java 应用程序定义了一组语言扩展。您也许已经听说过这些语言扩展,包括 JavaServer Pages™、servlet、Enterprise JavaBeans(EJB)以及其它语言扩展。这些 Java 语言扩展需要在某种应用程序服务器环境中运行,它们都使用 JDBC 或 SQLj 作为访问 DB2 数据库的接口。
Web 服务的前景如何?
Web 服务实质上是一种新的编程方式,它有助于在一个公司内或跨行业开发和部署松耦合的应用程序。在过去,开发人员往往需要“从头开始”开发大多数应用程序。“代码重用”这个术语常被开发人员挂在嘴边,但由于他们往往只相信自己所开发的代码,因此在大多数情况下并没有将这种概念付诸于实践。现在,由于软件开发已经发展成为一门学科,而且编程语言也在不断地发展,因此重用应用程序模块的能力得到了极大的提高。例如,Java 语言中就内置了许多开发人员经常使用的类库。
随着应用程序规模的增长,它们需要能够在分布式环境中执行。分布式应用程序能提供无限可伸缩性以及其它好处。多年来,为分布式应用程序定义接口一直是一项难题。开发人员可以采用与语言无关的技术,譬如 CORBA(Common Object Request Broker Architecture,公共对象请求代理体系结构),它提供了一个复杂且功能强大的编程模型。除了CORBA这种能够独立于语言的接口之外,还有一些分布式技术在单一的语言环境中工作得很好,譬如 Java RMI(Remote Method Invocation,远程方法调用)和 Microsoft 的 DCOM(Distributed Component Object Model,分布式组件对象模型)。
与以上技术相比,Web 服务通过使用 Web 服务描述语言(Web Service Description Language,WSDL),在应用程序资源提供者和调用者之间提供了一个易于理解的接口。Web 服务还使用了以下技术来帮助简化分布式应用程序的实现:
使用统一描述、发现和集成(Universal Description Discovery and Integration,UDDI)规范的应用程序接口发现机制。
同样也使用 UDDI 的应用程序接口描述。
使用简单对象访问协议(Simple Object Access Protocol,SOAP)的标准消息格式。SOAP 正处在修订过程中,将作为 W3C 的 XML 协议规范发布,。
使用 HTTP 这样的标准传输协议。
使用 TCP/IP 这样的标准网络协议。
Web 服务 — 体系结构
目前,Web 服务的体系结构被定义为几个层次,如 图 1所示。任何 Web 服务都包括这些基本的要素:
WSDL,它提供公共服务描述
SOAP,它提供基于 XML 的消息传递协议
图 1. Web 服务的分层体系结构WSDL 基于 XML 格式,它将 Web 服务描述为能够进行消息交换的服务访问点的集合,这些消息包含面向文档或面向过程的信息。开发人员可以使用任何编程语言来创建或调用 SOAP 消息。甚至连传输/网络层也很灵活。大多数最初的 Web 服务都使用 HTTP 协议部署在 TCP/IP 网络上,但也可以使用其它方式,包括 WebSphere® MQ 以及其它。
Web 服务体系结构考虑到了应用程序组件的 WSDL 接口可能会发生变化,也可能会随着时间而发生变化。统一描述、发现和集成(Universal Description Discovery and Integration,UDDI)规范帮助分布式应用程序开发人员和实现者解决这些应用程序发展过程中的问题。在因特网上,有 IBM 和 Microsoft(以及其它公司)这样的公司托管着公共的 UDDI 注册中心。开发人员可以使用这些注册中心来发布他们的应用程序接口(用 WSDL 来说明这些接口);另外也可以通过这些注册中心来发现其他开发人员的应用程序接口。当 WSDL 接口发生变化时,开发人员可以在公共的 UDDI 注册中心重新发布自己新的接口。
Web 服务 — 工具
在许多行业(譬如木工和汽车修理工)中,工具是必不可少的。在这一点上,软件开发也不例外。略微了解 Web 服务体系结构之后,软件开发工具可以帮助您在 Web 服务的世界中“遨游”。
IBM 的 WebSphere Studio 是一组开发工具,这些工具可以帮助您创建和维护 Java 应用程序,包括 Web 服务、XML 和用于 DB2 数据的数据访问应用程序。WebSphere Studio Site Developer Advanced 和 WebSphere Studio Application Developer 都提供了可以方便创建 DB2 Web 服务的环境。WebSphere Studio Site Developer 和 WebSphere Studio Application Developer 的关键区别之一是 WebSphere Studio Application Developer 中带有完整的 Enterprise JavaBeans(EJB)开发和测试环境。不过请注意,开发 Web 服务应用程序可以不依赖 EJB。
WebSphere Studio 平台替代了 IBM 的 VisualAge® for Java 产品,它基于 Eclipse( www.eclipse.org)这个开放的开发框架。WebSphere Studio 提供了一些用于创建 Java 应用程序和 DB2 数据的 WSDL 接口的工具。在 WebSphere Studio 中还提供了 UDDI 浏览器,可以帮助用户直接从 WebSphere Studio 向 UDDI 注册中心发布 Web 服务。通过新发行的 WebSphere Studio V5 ,您可以很方便地创建 DB2 用户自定义函数和存储过程。
IBM 的 WebSphere Application Server是符合 J2EE™ 的 Java Web 应用程序服务器,是托管 DB2 Web 服务提供程序的理想平台。
作为 Web 服务提供者和调用者的 DB2
图 2说明了 DB2 是如何完全参与到 Web 服务环境中的:
作为 Web 服务提供者的 DB2
作为 Web 服务调用者的 DB2
图 2. DB2 和 Web 服务环境作为 Web 服务提供者的 DB2
现在让我们看一下 图 2 左半部分。任何 Web 服务客户机应用程序可以通过 WSDL 接口来访问 DB2 数据库。可以使用 Web 服务对象运行时框架(Web services Object Runtime Framework,WORF)(也称为文档访问定义扩展,DADx)来创建 DB2 数据的 WSDL 接口。简单来说,该功能允许使用 XML 文件来定义对 DB2 数据的访问。该 XML 文件可以包含一系列的操作,每个操作可以包含 DB2 存储过程调用、XML数据的检索和存储、使用 SQL 语句进行的创建、查询、更改、删除等任务。 图 3是一个包含 SQL 操作的示例。
图 3. 说明 SQL SELECT 操作的 employee Web 服务(sample.dadx)
<?xml version="1.0" encoding="UTF-8"?> |
在 图 3中,定义了一个 showemployees 操作,该操作从 DB2 数据库中的 employee 表中返回所有记录。DADx 文件可以包含多个操作,这些操作会作为 Web 服务部署在一个应用程序模块中。
DB2 Web 服务环境( WORF)提供了基础结构来为每个您所定义的操作自动创建 WSDL 接口。WORF 使用 Java servlet 和 JSP 生成作为 Web 应用程序的 Web 服务测试客户机。该测试客户机可以使用简单的 HTTP 或 SOAP 绑定。如果直接使用 Web 浏览器来测试 DB2 Web 服务,HTTP 绑定非常有用。而 SOAP 绑定可以被 Web 服务客户机用来创建分布式应用程序。DB2 Web 服务用 XML 文档或 Java 对象的形式返回数据。如果要对返回的 XML 文档进行处理,可以在像 Java 和 C 这样编程语言中调用 XML 解析器。
至此我已经定义了通过 DADx 来进行 DB2 数据访问的操作,接下来该做什么了?
您必须将 DADx 文件及其运行时环境(Apache SOAP V2.2)部署到受支持的 Java Web 应用程序服务器环境(Apache/Jakarta Tomcat 3.2.x+ 或 IBM 的 WebSphere Application Server V4.x 或更高的发行版)中。在测试和部署完 DB2 Web 服务之后,任何 Web 服务客户机就可以开始使用 DB2 Web 服务了。用 WebSphere Application Server 来部署 DB2 Web 服务可以带来一些附加的好处,譬如,支持共用的数据库连接和集中化管理。还可以使用水平和垂直的伸缩技术来部署 WebSphere,从而提供深受大家欢迎的 DB2 Web 服务所需的容错性和大量事务的处理能力。DB2 Web 服务的操作特征
这里为每个 DADx 环境创建了一个描述符来标识连接到 DB2 数据库时所需要的 DB2 JDBC 驱动程序细节,其中也包括用户信息。操作将在 DADx 描述符中定义的该用户的授权范围内执行。用于 zSeries™ 上 DB2 UDB 的 DB2 Web 服务
用 DADx 来访问 DB2 UDB for zSeries 需要 Java Web 应用程序服务器,而无需考虑平台。如果 WebSphere 环境驻留在 zSeries 上,则需要用于 zSeries 的本机 DB2 JDBC 驱动程序。如果 WebSphere 环境驻留在 UNIX®、Windows® 或 Linux 平台上,则可以使用 DB2 UDB UNIX、Windows 或 Linux JDBC 驱动程序经过 DB2 Connect 来连接到 DB2 UDB for zSeries。作为 Web 服务调用者的 DB2
现在我们来看 图 2 的右半部分,其中,DB2 作为 Web 服务的调用者优化了至其它 Web 服务提供者的访问。DB2 的可扩展优化器(即 Starburst)于 1995 年引入。通过使用 SQL 语句,使用和集成 Web 服务数据变得较为容易。因为可以在数据返回至客户机应用程序之前,在 SQL 语句的上下文中操作数据,所以使用 SQL 来访问 Web 服务数据可以节省您的工作。在从 SQL 访问 Web 服务数据的过程中,工具起了重要作用。使用 WebSphere Studio 插件将 WSDL 转换成 DB2 SQL 函数可以简化将现有 WSDL 接口转换成 DB2 函数(表或标量)的任务。在 WebSphere Studio V5 中也包含了此工具。
直接从 DB2 SQL 语句来访问 Web 服务数据并不需要通过 Java 应用程序服务器。由 DB2 数据库管理员或数据库开发人员创建的 Web 服务 SQL 扩展,在 SQL 语句执行期间会自动建立与 Web 服务提供者的连接,然后以关系表或标量值的形式返回响应文档。
图 2 的右半部分说明了名为 getrate("country","country") 的 DB2 Web 服务 SQL 扩展。这个 SQL 函数返回两个国家或地区当前的货币兑换率。由于该数据一直处于变动之中,因此 Web 服务提供者只向应用程序提供最新的兑换率。在这个示例中,我们通过 SQL 来计算 STAFF 表中每种同类职业的平均薪水(用加拿大元表示)。在将结果返回给应用程序之前,还可以对结果进行排序。在不使用 DB2 Web 服务 SQL 扩展的情况下,非 DB2 Web 服务客户机应用程序也可以得到同样的结果,但这将需要更多的编程工作。
IBM 计划在 DB2 UDB V8 中提供这个 DB2 Web 服务基础结构,包括用于创建 SQL 扩展的工具。因为可以通过 SQL 语句来使用这些 Web 服务,所以使用 DB2 命令行处理器(Command Line Processor,CLP)这类工具测试 Web 服务访问很简单。
使用 DB2 Web 服务的几点建议
当使用 DADx 将 DB2 数据公布给 Web 服务时,可以考虑将数据访问逻辑嵌入到 DB2 存储过程中。目前,每个 DADx 操作中只能有一条 SQL 语句,并且只能在一个工作单元里执行。DB2 存储过程提供了功能非常强大的技术,可以为 DB2 数据访问创建一个抽象层。开发人员可以通过各种编程语言(包括 Java 和标准 SQL 过程语言)创建 DB2 存储过程。
注:在 DB2 UDB V8 中,已经重构了 Java 存储过程基础结构以改进性能。
为使开发工作更容易,请考虑使用 DB2 开发中心(DB2 Development Center),在 DB2 UDB V8 中,它替代了 DB2 存储过程构建器。可以用开发中心来创建和测试存储过程,以及创建用于 DB2 的其它 SQL 扩展。
结束语
使用 SQL 扩展将 Web 服务提供者数据和 DB2 数据集成起来是一项功能强大的技术,它可用于构建分布式应用程序。通过使用一条 SQL 语句,DB2 可以以并行方式执行 SQL 语句来集成各种数据提供者。
DB2 可以用作 Web 服务提供者或数据调用者。提供 Web 服务数据需要 Java 应用程序服务器,但不需要 JDBC 或 SQLj 编码,因为 DB2 Web 服务基础结构可以生成并执行所需的 JDBC 代码来访问 DB2 数据。使用 SQL 扩展,DB2 可以方便地使用和集成来自其它来源的 Web 服务数据。对于构建、部署和测试 DB2 Web 服务,工具非常重要。而 DB2 UDB 或 WebSphere Studio 直接提供了这些工具。
更多精彩
赞助商链接