Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669771
  • 博文数量: 759
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 4845
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-27 13:51
文章分类

全部博文(759)

文章存档

2011年(1)

2008年(758)

我的朋友

分类:

2008-10-27 13:57:21


   Database 10g web 服务允许您在数据库内部使用外部 web 服务时,利用您在 PL/SQL 和 SQL 中的开发投入。下面叙述如何构建您自己的 web 服务。
  
  正如现在我们都了解的那样,web 服务模型已证明是连接应用程序的一种有效的方式。Web 服务,如 XML — 用于信息的事实标准、SOAP (简单对象访问) — 使您能够在分布式环境中通过 HTTP、FTP、SMTP来 XML 文档、WSDL (Web 服务描述语言)和 UDDI,都允许您构建平台和语言独立的、松散耦合的分布式应用程序。
  
  您可以在 Database 10g 和 Oracle Application Server (OracleAS) 10g 中(通过内置在 OracleAS 中的 OC4J 版本)提供和使用 web 服务。Oracle Database 10g 允许您使用 PL/SQL (程序包、过程、函数和触发器)、SQL 查询、SQL DML 语句和 过程来定义 Web 服务的功能,OracleAS web 服务允许您用 J2EE (企业 Beans、JMS 等)来定义 Web 服务的功能。您还可以利用 OracleAS 将数据库功能作为 J2EE web 服务提供。
  
  不过,本文仅重点叙述 PL/SQL 数据库 web 服务。根据定义,Oracle Database 10g web 服务在数据库中提供功能;它们允许您利用您在 PL/SQL 和 SQL 中的开发投资,同时从数据库内部使用外部的 web 服务。
  
  在本文中,我将向您介绍数据库 web 服务,以及如何为 Oracle Database 10g 创建、发布和调用 PL/SQL web 服务。本文中引用的所有脚本和文件都在这里提供。
  
  所需软件
  在您跟随本文中给出的示例之前,您将需要安装以下软件:
  
  Oracle Components for J2EE (OC4J) 9.0.3 版或更高版本;您将需要独立完整版(也称为扩展版)
  Oracle Database 10g
  Oracle Net 10g
  Oracle SQL*Plus (和客户端或企业安装软件一起包含)
  Java 软件开发人员工具包 (SDK) 1.4 版或更高版本
  
  数据库模式设置
  首先,我们需要设置我们的数据库模式,一个简化的 web 商店示例。
  
  在发布您稍后将看到的 web 服务之前,您必须首先按如下方式创建一个名称为 store 的用户,并将授予该用户以下所需权限(您必须首先作为拥有 CREATE USER 权限的用户登录到数据库,以创建用户):
  
  CREATE USER store IDENTIFIED BY store;
  GRANT connect, resource TO store;
  
  注意:您将在文件 web_services.sql 中找到这些语句和这一部分中出现的设置商店模式的其它语句。
  
  接下来的两条语句作为 store 用户进行连接,并创建一个名称为 order_sq 的序列,该序列稍后用来填充订单表的主键:
  
  CONNECT store/store;
  CREATE SEQUENCE order_sq;
  
  下面的语句创建所需的四个数据库表,名称分别为:product_types、products、customers 和 orders:
  
  CREATE TABLE product_types (
   product_type_id INTEGER
  CONSTRAINT product_types_pk PRIMARY KEY,
   name VARCHAR2(10) NOT NULL
  );
  
  CREATE TABLE products (
   product_id INTEGER
  CONSTRAINT products_pk PRIMARY KEY,
   product_type_id INTEGER
  CONSTRAINT products_fk_product_types
  REFERENCES product_types(product_type_id),
   name VARCHAR2(30) NOT NULL,
   description VARCHAR2(50),
   price NUMBER(5, 2)
  );
  
  CREATE TABLE customers (
   customer_id INTEGER
  CONSTRAINT customers_pk PRIMARY KEY,
   first_name VARCHAR2(10) NOT NULL,
   last_name VARCHAR2(10) NOT NULL,
   dob DATE,
   phone VARCHAR2(12)
  );
  
  CREATE TABLE orders (
   order_id INTEGER
  CONSTRAINT orders_pk PRIMARY KEY,
   product_id INTEGER
  CONSTRAINT purchases_fk_products
  REFERENCES products(product_id),
   customer_id INTEGER
  CONSTRAINT purchases_fk_customers
  REFERENCES customers(customer_id),
   quantity INTEGER NOT NULL
  );
  
  注意:如果您在一个不同的模式中为 store 用户创建了这些数据库表,那么您将需要修改示例配置文件中的模式名称(您稍后将看到这些示例配置文件)。
  
  product_types 表用来示例在线商店可能存有的产品类型的名称,products 表包含关于销售的商品的详细信息,customers 表存储关于获许从商店订购产品的客户的信息,orders 表包含哪一个客户订购了产品的详细信息。
  
  下面的 INSERT 语句添加行到 customers、product_types 和 products 表中:
  
  INSERT INTO customers (
   customer_id, first_name, last_name, dob, phone
  ) VALUES (
   1, 'John', 'Brown', '01-JAN-1965', '800-555-1211'
  );
  
  INSERT INTO product_types (
   product_type_id, name
  ) VALUES (
   1, 'Book'
  );
  
  INSERT INTO products (
   product_id, product_type_id, name, description, price
  ) VALUES (
   1, 1, 'Modern Science', 'A description of modern science', 19.95
  );
  
  COMMIT;
  
  我们将使用 PL/SQL 来实施我们的数据库 web 服务代码。在您将 PL/SQL 代码作为 web 服务发布之前,您必须把它放在一个程序包中。列表 1 中的语句创建了一个 PL/SQL 程序包,这个程序包包含一个允许客户订购某种产品的过程。这个程序包的名称为 dbfunc,它包含一个名称为 place_order() 的过程,该过程接收产品的 ID、客户的 ID 和要购买的产品的数量。
  
  您许可以看到,place_order() 函数检查在 products 和 customers 表中是否存在产品 ID 和客户 ID,如果存在,则在 orders 表中添加一行,从而返回一个包含该订单 ID (这是由 order_sq 序列生成的值)的字符串。如果客户 ID 或产品 ID 无效,则返回一个包含错误消息 "No such customer" 或 "No such product" 的字符串。
  
  现在,让我们看看如何安装和配置 OC4J。
  
  安装和配置 OC4J
  您必须用以下示例命令来安装 OC4J (当准备这篇文章时,我使用了 2000 命令提示工具,您可以使用 Unix 或 Linux shell 中的类似的命令工具,方法是在目录路径中用斜杠 (/) 来替换反斜杠 (\)):
  
  e:
  cd e:\oracle\oc4j\j2ee\home
  java -jar oc4j.jar -install
  
  然后将会提示您输入管理用户的口令。我用 welcome 作为我的口令。
  
  您需要在 data-sources.xml 文件(该文件位于 oc4j\j2ee\home\config 目录中)中定义一个数据源,方法是添加类似于以下数据源元素的一部分内容:
  
  注意:您可以在 OTN 网站上找到本文的示例 data-sources.xml 文件。您可能需要修改 Oracle 数据库服务的名称 — 我使用默认的 ORCL 服务标识符 (SID) 并本地运行,Oracle Net 监听端口 1521,以进行连接。如果您的数据库在一个不同的上运行,并有一个不同的端口号,或一个不同的 SID,那么您将需要相应地修改数据源元素。您的数据库管理员能够为您提供数据库的相应的连接详情。此外,如果您在一个不同的模式中创建了示例数据库表,那么您将需要在 data-sources.xml 文件中修改您的设置中的用户名和口令。
  
  接下来,您需要通过以下命令启动 OC4J:
  e:
  cd e:\oracle\oc4j\j2ee\home
  java -jar oc4j.jar
  
  您将看到一条指示 OC4J 已经启动的确认消息。
  
  将 PL/SQL 程序包作为数据库 Web 服务发布
  
  接下来,让我们看看如何将 dbfunc PL/SQL 程序包作为 web 服务发布。
  
  实质上,数据库 web 服务使用 OC4J 中的功能来提供 Java 类 — Java 类在数据库中充当您的 web 服务的实际实施的一个包装。您的实施可以用 SQL 或 Java 存储过程以及 PL/SQL 来编写。
  
  您可以使用 OC4J 9.0.3 版或更高版本自带的 web 服务汇编工具来发布 PL/SQL 程序包。您需要将一个 config.xml 文件传递给 web 服务汇编工具,config.xml 包含关于数据库模式中您想要将它作为 web 服务提供的 PL/SQL 程序包的信息。列表 2 包含了我们的示例中使用的示例 config.xml 文件。(您还可以使用 JDeveloper 来发布 web 服务,但那是另外一篇文章:“轻松进行 Web 服务开发”(作者:Elangovan Balusamy)要叙述的内容。)
  
  如果您的数据库在一个不同的上运行、拥有一个不同端口号、或拥有一个不同于 localhost、1521 和 ORCL 的 SID,那么您将需要修改 db-url 元素中的项目。httpServerURL 项目拥有默认的服务器和端口号, OC4J 在其上作为 localhost 运行在端口 8888 上。如果您的 OC4J 运行在一个不同的服务器和端口上,那么您将需要编辑 config.xml 文件。(注意:您可以在您安装 OC4J 的 j2ee\home\config 目录下的 http-web-site.xml 文件中找到服务器和端口设置。此外,如果您在一个不同的模式中创建了示例数据库表,那么您将需要修改 config.xml 文件中的设置中的模式。)
  
  要将 dbfunc 作为 web 服务发布,您可以运行以下命令:
  
  set ORACLE_HOME=E:\oracle\oc4j
  
  set CLASSPATH=.;%ORACLE_HOME%\webservices\lib\wsdl.jar;%
【责编:admin】

--------------------next---------------------

阅读(433) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~