從數據庫調用外部處理過程的方法
Oraclei數據庫的最大優點之一從系統的觀點來看它完全不只是一個被動的信息庫通過內建的PL/SQL和Java語言以及調用外部程序的功能Oraclei數據庫能夠啟動並且完成各種處理任務
然而很多時候更需要完全在數據庫之外運行一個處理過程例如若過程需要巨大的庫來支持那就要以多線程方式工作或訪問由應用程序服務器提供的資源或許你也想在另一台電腦上運行處理過程那麼你就不會占用全部數據庫機器上的CPU的時間
在本專欄中我要討論用於在數據庫外面啟動處理過程的兩種流行的方法並給出工作示例應用程序代碼的概要來展示這些處理方法
示例應用程序源於一個現實世界當中需要在數據庫與應用程序服務器之間進行復雜交互的應用程序下面是示例應用程序中描述的三種處理方案
從PL/SQL調用一個HTTP來激活一個Java Servlet
使用高級排隊(AQ)功能來激活一個消息驅動的bean (MDB)
使用AQ將數據庫中的變化通知Java客戶端應用程序
圖 即為該示例應用程序中的這些方案
圖 工作示例應用程序的體系結構
使用UTL_HTTP
UTL_HTTP提供的軟件包使你能夠從SQL和PL/SQL調出HTTP在第一種方案中當有新行插入到表格中時需要從遠程網絡服務器上提取一個文件並將該文件保存在本地文件系統中servlet將URL作為參數來完成這項工作A PL/SQL ON INSERT觸發器使用UTL_HTTP來調用該servlet(它運行於Oraclei應用程序服務器上)UTL_HTTP的使用可能只是一個簡單的單行調用否則可以通過多個調用來處理諸如認證代理以及cookies這一類的復雜過程
我本可以使用UTL_HTTP來提取該文件和用UTL_FILE提供的軟件包來保存該文件然而使用servlet都有助於保護數據庫資源並且使我有更多的調度選擇一個servlet能完成的各種任務的其它例子還包括調用Enterprise JavaBean(EJB)給某人發送即時消息操縱圖像進行CORBA調用
使用高級排隊功能
在數據庫外面啟動處理過程的另一個方法是將消息排入隊列等候外部處理AQ提供了基於Oraclei Database而構建的消息傳送功能
在第二種方案中需要調用一個Web服務來確認某些信息PL/SQL程序將使用AQ將要發送到外部程序的消息進行排隊因為一條消息一經成功地排入隊列數據庫的一個事務就能完成所以在這種方法中使用AQ能高效地將處理過程分解成前台處理和後台處理
MDB是一種當新消息到達時便自動被調用的EJB我用MDB將消息退出隊列並從Web服務檢索某些相關的數據MDB會向Web服務發送一個SOAP調用並用已更改的或已更新的信息對數據庫進行更新使用MDB是訪問應用程序服務器提供的服務的一個非常棒的手段
在第三種方案中需要通知Java客戶端應用程序數據庫中的數據發生了變化以便該應用程序對顯示內容進行相應的更新和前一種方案一樣當數據發生變化時PL/SQL觸發器會將消息排入隊列
Java提供Java Message Service (JMS)應用編程接口(API)用於訪問消息傳送系統我已經創建了一個Java應用程序來監控數據的變化它用JMS將由PL/SQL觸發器放入AQ的消息從隊列中退出
更多的活動
可在 中查找全部方案和工作代碼示例以便了解更多的關於現用數據庫的信息
From:http://tw.wingwit.com/Article/program/Oracle/201311/17163.html