国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

在 Oracle10g 上構(gòu)建 PL/SQL Web 服務(wù)

2024-08-29 13:37:38
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  Oracle Database 10g web 服務(wù)答應(yīng)您在數(shù)據(jù)庫(kù)內(nèi)部使用外部 web 服務(wù)時(shí),利用您在 PL/SQL 和 SQL 中的開發(fā)投入。下面敘述如何構(gòu)建您自己的 web 服務(wù)。
  
  正如現(xiàn)在我們都了解的那樣,web 服務(wù)模型已證實(shí)是連接應(yīng)用程序的一種有效的方式。Web 服務(wù)協(xié)議,如 xml — 用于信息交換的事實(shí)標(biāo)準(zhǔn)、SOAP (簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議) — 使您能夠在分布式環(huán)境中通過(guò) HTTP、FTP、SMTP來(lái)交換 XML 文檔、WSDL (Web 服務(wù)描述語(yǔ)言)和 UDDI,都答應(yīng)您構(gòu)建平臺(tái)和語(yǔ)言獨(dú)立的、松散耦合的分布式應(yīng)用程序。
  
  您可以在 Oracle Database 10g 和 Oracle application Server (OracleAS) 10g 中(通過(guò)內(nèi)置在 OracleAS 中的 OC4J 版本)提供和使用 web 服務(wù)。Oracle Database 10g 答應(yīng)您使用 PL/SQL (程序包、過(guò)程、函數(shù)和觸發(fā)器)、SQL 查詢、SQL DML 語(yǔ)句和 java 存儲(chǔ)過(guò)程來(lái)定義 Web 服務(wù)的功能,OracleAS web 服務(wù)答應(yīng)您用 J2EE (企業(yè) JavaBeans、JMS 等)來(lái)定義 Web 服務(wù)的功能。您還可以利用 OracleAS 將數(shù)據(jù)庫(kù)功能作為 J2EE web 服務(wù)提供。
  
  不過(guò),本文僅重點(diǎn)敘述 PL/SQL 數(shù)據(jù)庫(kù) web 服務(wù)。根據(jù)定義,Oracle Database 10g web 服務(wù)在數(shù)據(jù)庫(kù)中提供功能;它們答應(yīng)您利用您在 PL/SQL 和 SQL 中的開發(fā)投資,同時(shí)從數(shù)據(jù)庫(kù)內(nèi)部使用外部的 web 服務(wù)。
  
  在本文中,我將向您介紹數(shù)據(jù)庫(kù) web 服務(wù),以及如何為 Oracle Database 10g 創(chuàng)建、發(fā)布和調(diào)用 PL/SQL web 服務(wù)。本文中引用的所有腳本和文件都在這里提供。
  
  所需軟件
  在您跟隨本文中給出的示例之前,您將需要安裝以下軟件:
  
  Oracle Components for J2EE (OC4J) 9.0.3 版或更高版本;您將需要獨(dú)立完整版(也稱為擴(kuò)展版)
  Oracle Database 10g
  Oracle Net 10g
  Oracle SQL*Plus (和客戶端或企業(yè)安裝軟件一起包含)
  Java 軟件開發(fā)人員工具包 (SDK) 1.4 版或更高版本
  
  數(shù)據(jù)庫(kù)模式設(shè)置
  首先,我們需要設(shè)置我們的數(shù)據(jù)庫(kù)模式,一個(gè)簡(jiǎn)化的 web 商店示例。
  
  在發(fā)布您稍后將看到的 web 服務(wù)之前,您必須首先按如下方式創(chuàng)建一個(gè)名稱為 store 的用戶,并將授予該用戶以下所需權(quán)限(您必須首先作為擁有 CREATE USER 權(quán)限的用戶登錄到數(shù)據(jù)庫(kù),以創(chuàng)建用戶):
  
  CREATE USER store IDENTIFIED BY store;
  GRANT connect, resource TO store;
  
  注重:您將在文件 web_services.sql 中找到這些語(yǔ)句和這一部分中出現(xiàn)的設(shè)置商店模式的其它語(yǔ)句。
  
  接下來(lái)的兩條語(yǔ)句作為 store 用戶進(jìn)行連接,并創(chuàng)建一個(gè)名稱為 order_sq 的序列,該序列稍后用來(lái)填充訂單表的主鍵:
  
  CONNECT store/store;
  CREATE SEQUENCE order_sq;
  
  下面的語(yǔ)句創(chuàng)建所需的四個(gè)數(shù)據(jù)庫(kù)表,名稱分別為: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
  );
  
  注重:假如您在一個(gè)不同的模式中為 store 用戶創(chuàng)建了這些數(shù)據(jù)庫(kù)表,那么您將需要修改示例配置文件中的模式名稱(您稍后將看到這些示例配置文件)。

  
  product_types 表用來(lái)存儲(chǔ)示例在線商店可能存有的產(chǎn)品類型的名稱,products 表包含關(guān)于銷售的商品的具體信息,customers 表存儲(chǔ)關(guān)于獲許從商店訂購(gòu)產(chǎn)品的客戶的信息,orders 表包含哪一個(gè)客戶訂購(gòu)了產(chǎn)品的具體信息。
  
  下面的 INSERT 語(yǔ)句添加行到 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 來(lái)實(shí)施我們的數(shù)據(jù)庫(kù) web 服務(wù)代碼。在您將 PL/SQL 代碼作為 web 服務(wù)發(fā)布之前,您必須把它放在一個(gè)程序包中。列表 1 中的語(yǔ)句創(chuàng)建了一個(gè) PL/SQL 程序包,這個(gè)程序包包含一個(gè)答應(yīng)客戶訂購(gòu)某種產(chǎn)品的過(guò)程。這個(gè)程序包的名稱為 dbfunc,它包含一個(gè)名稱為 place_order() 的過(guò)程,該過(guò)程接收產(chǎn)品的 ID、客戶的 ID 和要購(gòu)買的產(chǎn)品的數(shù)量。
  
  您許可以看到,place_order() 函數(shù)檢查在 products 和 customers 表中是否存在產(chǎn)品 ID 和客戶 ID,假如存在,則在 orders 表中添加一行,從而返回一個(gè)包含該訂單 ID (這是由 order_sq 序列生成的值)的字符串。假如客戶 ID 或產(chǎn)品 ID 無(wú)效,則返回一個(gè)包含錯(cuò)誤消息 "No such customer" 或 "No such product" 的字符串。
  
  現(xiàn)在,讓我們看看如何安裝和配置 OC4J。
  
  安裝和配置 OC4J
  您必須用以下示例命令來(lái)安裝 OC4J (當(dāng)預(yù)備這篇文章時(shí),我使用了 windows 2000 命令提示工具,您可以使用 Unix 或 linux shell 中的類似的命令工具,方法是在目錄路徑中用斜杠 (/) 來(lái)替換反斜杠 (/)):
  
  e:
  cd e:/oracle/oc4j/j2ee/home
  java -jar oc4j.jar -install
  
  然后將會(huì)提示您輸入治理用戶的口令。我用 welcome 作為我的口令。
  
  您需要在 data-sources.xml 文件(該文件位于 oc4j/j2ee/home/config 目錄中)中定義一個(gè)數(shù)據(jù)源,方法是添加類似于以下數(shù)據(jù)源元素的一部分內(nèi)容:
  
  注重:您可以在 OTN 網(wǎng)站上找到本文的示例 data-sources.xml 文件。您可能需要修改 Oracle 數(shù)據(jù)庫(kù)服務(wù)的名稱 — 我使用默認(rèn)的 ORCL 服務(wù)標(biāo)識(shí)符 (SID) 并本地運(yùn)行,Oracle Net 監(jiān)聽端口 1521,以進(jìn)行連接。假如您的數(shù)據(jù)庫(kù)在一個(gè)不同的服務(wù)器上運(yùn)行,并有一個(gè)不同的端口號(hào),或一個(gè)不同的 SID,那么您將需要相應(yīng)地修改數(shù)據(jù)源元素。您的數(shù)據(jù)庫(kù)治理員能夠?yàn)槟峁?shù)據(jù)庫(kù)的相應(yīng)的連接詳情。此外,假如您在一個(gè)不同的模式中創(chuàng)建了示例數(shù)據(jù)庫(kù)表,那么您將需要在 data-sources.xml 文件中修改您的設(shè)置中的用戶名和口令。
  
  接下來(lái),您需要通過(guò)以下命令啟動(dòng) OC4J:
  e:
  cd e:/oracle/oc4j/j2ee/home
  java -jar oc4j.jar
  
  您將看到一條指示 OC4J 已經(jīng)啟動(dòng)的確認(rèn)消息。
  
  將 PL/SQL 程序包作為數(shù)據(jù)庫(kù) Web 服務(wù)發(fā)布
  
  接下來(lái),讓我們看看如何將 dbfunc PL/SQL 程序包作為 web 服務(wù)發(fā)布。
  
  實(shí)質(zhì)上,數(shù)據(jù)庫(kù) web 服務(wù)使用 OC4J 中的功能來(lái)提供 Java 類 — Java 類在數(shù)據(jù)庫(kù)中充當(dāng)您的 web 服務(wù)的實(shí)際實(shí)施的一個(gè)包裝。您的實(shí)施可以用 SQL 或 Java 存儲(chǔ)過(guò)程以及 PL/SQL 來(lái)編寫。
  
  您可以使用 OC4J 9.0.3 版或更高版本自帶的 web 服務(wù)匯編工具來(lái)發(fā)布 PL/SQL 程序包。您需要將一個(gè) config.xml 文件傳遞給 web 服務(wù)匯編工具,config.xml 包含關(guān)于數(shù)據(jù)庫(kù)模式中您想要將它作為 web 服務(wù)提供的 PL/SQL 程序包的信息。列表 2 包含了我們的示例中使用的示例 config.xml 文件。(您還可以使用 JDeveloper 來(lái)發(fā)布 web 服務(wù),但那是另外一篇文章:“輕松進(jìn)行 Web 服務(wù)開發(fā)”(作者:Elangovan Balusamy)要敘述的內(nèi)容。)
  
  假如您的數(shù)據(jù)庫(kù)在一個(gè)不同的服務(wù)器上運(yùn)行、擁有一個(gè)不同端口號(hào)、或擁有一個(gè)不同于 localhost、1521 和 ORCL 的 SID,那么您將需要修改 db-url 元素中的項(xiàng)目。
httpServerURL 項(xiàng)目擁有默認(rèn)的服務(wù)器和端口號(hào), OC4J 在其上作為 localhost 運(yùn)行在端口 8888 上。假如您的 OC4J 運(yùn)行在一個(gè)不同的服務(wù)器和端口上,那么您將需要編輯 config.xml 文件。(注重:您可以在您安裝 OC4J 的 j2ee/home/config 目錄下的 http-web-site.xml 文件中找到服務(wù)器和端口設(shè)置。此外,假如您在一個(gè)不同的模式中創(chuàng)建了示例數(shù)據(jù)庫(kù)表,那么您將需要修改 config.xml 文件中的設(shè)置中的模式。)
  
  要將 dbfunc 作為 web 服務(wù)發(fā)布,您可以運(yùn)行以下命令:
  
  set ORACLE_HOME=E:/oracle/oc4j
  
  set CLASSPATH=.;%ORACLE_HOME%/webservices/lib/wsdl.jar;%

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 万载县| 临桂县| 昌宁县| 濉溪县| 邹城市| 响水县| 定州市| 鹤山市| 杭锦后旗| 北安市| 延安市| 旬邑县| 威信县| 扶绥县| 林甸县| 南华县| 南昌市| 绥阳县| 松溪县| 武山县| 太和县| 搜索| 龙井市| 三门峡市| 湾仔区| 景谷| 五常市| 长海县| 无为县| 平陆县| 松江区| 佛学| 尖扎县| 麻阳| 个旧市| 正镶白旗| 锡林浩特市| 凌源市| 阳高县| 遂昌县| 千阳县|