ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用Web服务虚拟化Oracle数据库(转)

使用Web服务虚拟化Oracle数据库(转)

原创 Linux操作系统 作者:jcszjswkzhou 时间:2019-04-27 13:24:05 0 删除 编辑
使用Web服务虚拟化Oracle数据库,Web服务,性能调优
了解 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 核对系统口令

$ jpub -u scott/tiger -sysuser system/manager -proxywsdl=http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl -proxyopts=tabfun -httpproxy=www-proxy.us.oracle.com:80 -endpoint=http://64.124.140.30:9090/soap -dir=quotesquotes/src/genproxy/NetXmethodsServicesStockquoteStockQuotePortClientJPub.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您还可以计划批处理作业该作业将定期调用特定的 Web 服务并存储结果

或者您可以使用 UTL_DBWS 程序包在运行时动态生成代理、方法名和参数 该程序包支持动态调用接口 (DII)(动态调用的变体)后者在运行时生成服务端点接口 但是从数据库中动态调用外部 Web 服务目前不支持复杂类型而只支持可以映射为 SQL 或 PL/SQL 内置类型的 XML 类型

Web 服务数据源(表函数) 您还可以通过 Oracle 数据库表函数机制(允许将二进制结果集作为虚拟表进行处理)从单个或多个 Web 服务中查询 SQL 函数并将其应用于结果集 (有关完整的示例请参阅数据库 Web 服务示例代码页

在该示例中JPublisher -proxyopts=tabfun 选项为特定 Web 服务自动生成表函数包装程序 例如以下演示了在 SQL*Plus 中针对要跟踪报价的(选自符号表中的)符号列表调用 getQuote Web 服务生成表函数并对该表函数进行查询

首先创建符号表

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.输出显示给定符号的报价
您可以对表函数应用 SQL 运算符(MIN、MAX、AVG 等) 还可以存储值并计划批处理作业该作业定期刷新这些值然后使用 SQL 的强大功能挖掘该表

有关更多详细信息请参阅 Oracle 数据库 JPublisher 指南中的“简化 Web 服务调出的选项”或上面提到的我所撰写的书籍

将数据库用作 Web 服务提供方

利用将数据库转换为 Web 服务提供方这一功能数据库的功能得以扩展到 Web 服务客户端应用程序方法是通过标准的 Web 服务机制允许执行数据库操作和数据检索

例如许多客户将现有的数据库资源(如 PL/SQL 存储过程/函数和程序包、Java 存储过程/函数、预定义的 SQL 查询、DML 和 Oracle 高级查询进程)重用为基于标准的 Web 服务 换言之该服务是使用数据库产物实现的并在数据库内部运行因此数据库开发人员和 DBA 无需掌握 Java 或 Web 服务编程技术便可以利用它们

为实现该目标可以利用 JPublisher 的功能为单个或一组数据库操作生成 Java 代理 具体而言可以在 Oracle 应用服务器中将 Java 代理类发布为标准 J2EE Web 服务;为容纳数据库模型可以使用模式、参数和代码生成选项扩展后者的集成 Web 服务汇编程序 与在中间层上部署的任何其他基于 J2EE 的 Web 服务一样生成的 Web 服务端点由 Oracle 应用服务器运行时管理

在 Web 服务上调用函数时Java 代理使用 JDBC 在数据库中调用相应的操作 随后在数据库中执行该服务将结果集包装到 SOAP 消息中然后发送回服务请求程序

此外JPublisher 还允许映射 Oracle 应用服务器 Web 服务框架不支持的数据库类型如 Ref 游标或 PL/SQL 布尔值

有关更多详细信息请参阅 JPublisher 文档、Oracle 数据库 Java 开发人员指南和 Oracle 应用服务器 Web 服务开发人员指南

选择实施和包装

某些客户倾向于将 Web 服务框架与数据库(Oracle 数据库 Web 服务的当前包装)分开而其他客户倾向于使用集成包装(受 Oracle 数据库原生支持的数据库 Web 服务提供程序) 每个实现各有优缺点

首先通过 HTTP 直接在 Oracle 数据库中处理 WSDL 和 SOAP 请求和响应从技术上是可行的 尽管这样的方法可以满足简单 Web 服务的需要但它无法满足企业 Web 服务和 SOA(稍后将对其进行详细介绍)的可伸缩性要求

其次Web 服务和 SOA 框架供应商正在积极地增加新规范(QOS、互操作性等)或增强现有规范 我认为与可以简单上载的 Web 服务客户端程序系列不同Web 服务提供程序和 SOA 程序系列更复杂并且在灵活的中间层环境(而非更稳定的 RDBMS 环境)中能够得到更妥善地处理

第三包括 Oracle 在内的大多数供应商针对中间层和 RDBMS 层使用的是同一 Web 服务和 SOA 框架因此可以在数据库层和应用服务器层之间提供一致的 Web 服务开发或组装、部署和管理 下一部分将介绍此类包装的好处

在 SOA 中集成 Oracle 数据库

SOA 是一个基于 Web 服务标准和规范的概念这使得用户可以构造客户端应用程序并可在其中简单地注册、发现并使用通过企业网格部署的服务 我们已经了解了如何将数据库操作公开为标准的 Web 服务下面我们将更深入了解一番: 如何使这些服务成为企业 SOA 的一部分

通过 Java 代理将数据库操作公布为 Web 服务使这些代理可以继承 Oracle 融合中间件 SOA 框架(包括 WS 互操作性、Web 服务可靠的消息处理、WS 安全性、Web 服务管理和 BPEL 集成)的互操作性和 QOS: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 服务工作流流程的一部分


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-122156/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2007-08-29

  • 博文量
    3488
  • 访问量
    2613065