使用Web服务虚拟化Oracle数据库
文章作者 100test 发表时间 2007:03:14 13:39:00
来源 100Test.Com百考试题网
了解 Oracle 数据库 10g 的数据库 Web 服务,及其在面向服务的体系结构中的作用。
本文相关下载:Oracle 数据库 10g数据库 Web 服务调出实用程序
2005 年 11 月发表
正如我在 Web 服务期刊中发表的上一篇文章中所介绍的,Web 服务使您可以使用行业标准机制轻松地访问远程内容和应用程序功能,而不用依赖供应商的平台、位置、服务实施或数据格式。 因此,Web 服务是实现资源虚拟化(构建企业网格的关键要求)的主要方法。
尽管基于符合标准的中间件的面向服务的体系结构 (SOA) 在该领域获得了广泛的关注,但数据库 Web 服务(通过 HTTP 和 SOAP 等标准 Web 服务机制调用数据库操作)却非常流行。 根据 2004 Evans Data Corporation 调查,超过三分之二的调查对象表示他们正在开发或部署数据库 Web 服务。
Oracle 数据库 10g 可以在两个 Web 服务模式下工作: 作为 Web 服务使用方(从数据库内部调用外部 Web 服务)或 Web 服务提供方(客户端通过 Internet/Intranet 调用数据库操作,从而对这些操作进行“虚拟化”)。 Oracle 数据库 10g 同时支持这两个模式 — 在使用方模式下,生成 Java 代理类和 PL/SQL 包装程序,并根据给定的 Web 服务定义语言 (WSDL) 文件将相应的文件加载到数据库中;在提供方模式下,支持在 SOA 中将 PL/SQL、Java 存储过程、SQL 查询和 SQL DML 发布为 Web 服务。 (有关更多详细信息,请参见技术白皮书“Oracle 数据库 10g 中 Java DB、JDBC 和数据库 Web 服务的新特性”)。
在本文中,我将从较高层面对这两种类型的数据库 Web 服务进行介绍,循序渐进地指导您如何运行自己的数据库 Web 服务演示,并将阐述在 SOA 中集成数据库 Web 服务的好处。
有关开发和部署数据库 Web 服务的更多信息,请参见我撰写的使用 Java 和 Web 服务进行 Oracle 数据库编程一书(该书即将由 Elsevier Digital Press 出版);您可以在此处下载“预览”章节。 该书将包含更多数据库 Web 服务示例。
将数据库用作 Web 服务使用方
通过将数据库用作 Web 服务使用方,数据库的涵盖范围得以扩展(通过 SQL 查询或批处理作业/计划作业),其中将包括动态数据(如股票价格)、按需生成的数据(如信用卡授权)、定期更改的数据(如 IRS 表)或原有系统(通过 Web 服务包装程序)以及任何通常可以通过 Web 服务机制(如联机生物信息学/基因组数据库)访问的数据。
首先,我们了解一下如何为 Oracle 数据库提供 Web 服务支持。
Web 服务调出实用程序。 以 OTN 中免费下载形式提供的数据库 Web 服务调出实用程序(在 Oracle9i 和 Oracle 10g 版本中)通过将纯 Java Web 服务客户端程序系列加载到数据库中,将现有数据库转换为 Web 服务使用方。 这是一个一次性操作。
将该调出实用程序解压缩到 $ORACLE_HOME 下。
将 dbwsclient.jar 文件加载到 SYS 模式(实现共享)中,或加载到将从中调用 Web 服务客户端的特定模式中:% loadjava -u sys/change -r -v -f -s -grant public -genmissing sqlj/lib/dbwsclient.jar接下来,对于要从数据库中调用的每个 Web 服务,您将执行静态调用(推荐)或动态调用。
静态 Web 服务调出(编译时)。在给定 WSDL 文件或服务 URL 的情况下,JPublisher(一个数据库实用程序,用于生成 Java 类以在 Java 客户端程序中表示数据库实体)将执行三个操作:生成要直接在支持 Java 和支持 Web 服务的 Oracle 数据库中使用的相应 Java 客户端代理在 Java 代理上生成 PL/SQL 包装程序包,以便 SQL 和 PL/SQL 能够对外部 Web 服务调用操作将所有内容加载(如果您选择加载)到给定的数据库模式中,前提是它具有相应的权限您将需要为 Web 服务调出指定几个 JPublisher 选项:proxywsdl — 要调用的 Web 服务的 WSDL 文件的 URL user — 为其生成 PL/SQL 包装程序的数据库模式(和口令)
httpproxy — 用于访问 WSDL 文件的 HTTP 代理主机和端口sysuser — 具有 SYSDBA 权限的数据库模式,使 JPublisher 能够将生成的文件加载到数据库中。 如果不声明该参数,则必须将生成的文件手动加载到数据库中。
proxyopts — 特定于 proxywsdl 的选项列表dir — 所有生成文件的存储目录Oracle 10g 第 2 版 JPublisher 还支持基本类型数组和 JavaBeans 等复杂类型。
让我们看一个例子。 下面的简短演示使用了 getQuote Web 服务(由 www.xmethods.net 免费提供)并提供延迟 20 分钟的股票报价;您可以使用类似的与动态数据相关的 Web 服务来运行该演示。
WSDL 位于 http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl 中。 单击“分析 WSDL”链接可以获得端点位置,Web 服务在该位置侦听传入的请求。 该端点位于 http://64.124.140.30:9090/soap 中;单击“操作”链接可以获得操作和方法名。
首先,确认 dbwsa.jar、JDBC 和 JPublisher/SQLJ 库($OH/sqlj/lib/translator.jar、$OH/sqlj/lib/runtime12.jar)位于 CLASSPATH 中。
然后,运行以下 JPublisher 命令生成 Web 服务客户端代理和 PL/SQL 包装程序,并将它们透明地加载到数据库的 JVM 中。 为使生成的代码能够在数据库中正常运行,请确保客户端 JDK 与 Java 运行时兼容。 (Oracle9i 第 2 版与 JDK-1.3.x 兼容,而 Oracle 数据库 10g 与 JDK 1.4.x 兼容;我在本示例中使用了 Oracle 10g 第 2 版 JPublisher.) 此外,请与您的 DBA 核对系统口令。