使用 Web 服务虚拟化 Oracle 数据库
作者:Kuassi Mensah 来源:http://www.oracle.com 添加时间:2006-5-26 9:53:37了解 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
- 生成要直接在支持 Java 和支持 Web 服务的 Oracle 数据库中使用的相应 Java 客户端代理
- 在 Java 代理上生成 PL/SQL 包装程序包,以便 SQL 和 PL/SQL 能够对外部 Web 服务调用操作
- 将所有内容加载(如果您选择加载)到给定的数据库模式中,前提是它具有相应的权限
- proxywsdl — 要调用的 Web 服务的 WSDL 文件的 URL
- user — 为其生成 PL/SQL 包装程序的数据库模式(和口令)
- httpproxy — 用于访问 WSDL 文件的 HTTP 代理主机和端口
- sysuser — 具有 SYSDBA 权限的数据库模式,使 JPublisher 能够将生成的文件加载到数据库中。 如果不声明该参数,则必须将生成的文件手动加载到数据库中。
- proxyopts — 特定于 proxywsdl 的选项列表
- dir — 所有生成文件的存储目录
$ jpub -u scott/tiger -sysuser system/manager -proxywsdl=http://services.xmethods.net/soap/urn:xmethods-delayed您还可以计划批处理作业,该作业将定期调用特定的 Web 服务并存储结果。 或者,您可以使用 UTL_DBWS 程序包在运行时动态生成代理、方法名和参数。 该程序包支持动态调用接口 (DII)(动态调用的变体),后者在运行时生成服务端点接口。 但是,从数据库中动态调用外部 Web 服务目前不支持复杂类型,而只支持可以映射为 SQL 或 PL/SQL 内置类型的 XML 类型。 Web 服务数据源(表函数)。 您还可以通过 Oracle 数据库表函数机制(允许将二进制结果集作为虚拟表进行处理)从单个或多个 Web 服务中查询 SQL 函数并将其应用于结果集。 (有关完整的示例,请参阅数据库 Web 服务示例代码页。) 在该示例中,JPublisher -proxyopts=tabfun 选项为特定 Web 服务自动生成表函数包装程序。 例如,以下演示了在 SQL*Plus 中,针对要跟踪报价的(选自符号表中的)符号列表调用 getQuote Web 服务生成表函数,并对该表函数进行查询。
-quotes.wsdl -proxyopts=tabfun -httpproxy=www-proxy.us.oracle.com:80 -endpoint=http://64.124.140.30:9090/soap -dir=quotesquotes/src/genproxy/NetXmethodsServicesStockquoteStockQuotePortClient
JPub.javaquotes/plsql_wrapper.sqlquotes/plsql_dropper.sqlquotes/plsql_grant.sqlquotes/plsql_revoke.sqlExecuting quotes/plsql_dropper.sqlExecuting quotes/plsql_wrapper.sqlExecuting quotes/plsql_grant.sqlLoading quotes/plsql_proxy.jarSQL> select jpub_plsql_wrapper.getQuote('ORCL') as Quote from dual;QUOTE---------- 12.6
- 首先创建符号表。
SQL> create table symbtab (quote varchar2(4));SQL> insert into symbtab values('ORCL');SQL> insert into symbtab values ('CSCO');SQL> insert into symbtab values ('QCOM');SQL> insert into symbtab values ('QQQQ');SQL> insert into symbtab values ('GOOG');SQL> insert into symbtab values ('EBAY');SQL> insert into symbtab values ('YHOO');SQL> commit - 然后,执行以下 SQL 命令;它针对该表中的每个符号调用 Web 服务,然后查询表函数(例如,结果集)。 理想情况下,您可能需要 Web 服务,它获取几个参数形式的符号并返回它们的值。
SQL> col ARG0 format a20SQL> select * from table(jpub_plsql_wrapper.to_table_getQuote
(cursor(select * from symbtab)));ARG0 RES-------------------- ----------ORCL 12.64CSCO 17.12QCOM 43.4QQQQ 38.2799GOOG 353.58EBAY 38.2YHOO 35.427 rows selected.
- Web 服务互操作性。 注意,互操作性是实现所有 Web 服务承诺的关键。 WS-I 组织通过 WS-I Basic Profile 1.0 规范指定了 Web 服务框架具备“可互操作性”的含义。 与 J2EE 认证计划相似,WS-I Basic Profile 1.0 控制对 SOAP 1.1、WSDL 1.1、HTTP 1.1、HTTP 绑定(或 HTTPS)和 XML 模式(第 1 部分和第 2 部分)的支持。 Oracle 融合中间件 SOA 框架不但符合 WS-I Basic Profile 1.0,而且还强调与其他供应商/商家规范的互操作性。
- Web 服务可靠的消息处理。 Oracle 应用服务器为基于 SOAP 的 Web 服务实现可靠的消息处理;它具有开放性,并在 Web 服务之间提供了可靠的 SOAP 消息处理。 消息最少发送一次(有保证的发送)、最多发送一次(有保证的消除重复)或只发送一次(有保证的发送并消除重复)。 Oracle 应用服务器当前实施 OASIS 标准 WS-Reliability,并且 Oracle 是 OASIS WS-ReliableExchange 组的一员,以将 WS-Reliability 与 WS-ReliableMessaging 合并,从而确保一个可互操作的行业范围采用的可靠消息处理标准。 Oracle 数据库 Web 服务可以在 SOA 中使用这些服务。
- WS 安全性。 WS 安全性规范通过 XML 数字签名提供了安全的 SOAP 消息,通过 XML 加密提供机密性,并通过 Username Token 和 X509 Token 提供证书传播。 Oracle Web 服务管理者工具使您可以使用代理和网关通过 WS 安全性保证数据库 Web 服务的安全。
- Web 服务管理。 Oracle Web 服务管理器的独特管理框架提供了 Web 服务访问控制、一次性登录、集中的安全性策略管理,Sarbanes-Oxley、Gramm-Leach-Bliley 和 HIPAA 等规范的实施 ,并监控 WS 安全性、Web 服务可靠的消息处理、记录和审计。 这些特性通过一系列 Java 管理扩展 (JMX) 管理 Bean (Mbean) 公开。
- BPEL 集成。 BPEL 是新兴的业务流程定义标准;可以将它看作是 Web 服务的工作流。 数据库 Web 服务可以是 Oracle BPEL 流程管理器(它提供了 rpc/encoded 以及 doc/literal 消息处理)编排的复杂 Web 服务工作流流程的一部分。
站内搜索
Oracle 数据库 10g