分享
 
 
 

在Oracle10g上构建PL/SQLWeb服务

王朝oracle·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

Oracle Database 10g web 服务允许您在数据库内部使用外部 web 服务时,利用您在 PL/SQL 和 SQL 中的开发投入。下面叙述如何构建您自己的 web 服务。

正如现在我们都了解的那样,web 服务模型已证明是连接应用程序的一种有效的方式。Web 服务协议,如 XML ― 用于信息交换的事实标准、SOAP (简单对象访问协议) ― 使您能够在分布式环境中通过 HTTP、FTP、SMTP来交换 XML 文档、WSDL (Web 服务描述语言)和 UDDI,都允许您构建平台和语言独立的、松散耦合的分布式应用程序。

您可以在 Oracle Database 10g 和 Oracle Application Server (OracleAS) 10g 中(通过内置在 OracleAS 中的 OC4J 版本)提供和使用 web 服务。Oracle Database 10g 允许您使用 PL/SQL (程序包、过程、函数和触发器)、SQL 查询、SQL DML 语句和 Java 存储过程来定义 Web 服务的功能,OracleAS web 服务允许您用 J2EE (企业 JavaBeans、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 (当准备这篇文章时,我使用了 Windows 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;%

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有