 圖1: 工作示例應(yīng)用程序的體系結(jié)構(gòu)使用UTL_HTTPUTL_HTTP提供的軟件包使你能夠從SQL和PL/SQL調(diào)出HTTP。在第一種方案中,當(dāng)有新行插入到表格中時(shí)需要從遠(yuǎn)程網(wǎng)絡(luò)服務(wù)器上提取一個(gè)文件,并將該文件保存在本地文件系統(tǒng)中。servlet將URL作為參數(shù),來完成這項(xiàng)工作。A PL/SQL ON INSERT觸發(fā)器使用UTL_HTTP來調(diào)用該servlet(它運(yùn)行于Oracle9i應(yīng)用程序服務(wù)器上)。UTL_HTTP的使用可能只是一個(gè)簡單的單行調(diào)用,否則可以通過多個(gè)調(diào)用來處理諸如認(rèn)證、代理以及cookies這一類的復(fù)雜過程。我本可以使用UTL_HTTP來提取該文件和用UTL_FILE提供的軟件包來保存該文件。然而,使用servlet都有助于保護(hù)數(shù)據(jù)庫資源,并且使我有更多的調(diào)度選擇。一個(gè)servlet能完成的各種任務(wù)的其它例子還包括調(diào)用EnterPRise JavaBean(EJB)、給某人發(fā)送即時(shí)消息、操縱圖像、進(jìn)行CORBA調(diào)用。使用高級排隊(duì)功能 在數(shù)據(jù)庫外面啟動處理過程的另一個(gè)方法是將消息排入隊(duì)列等候外部處理。AQ提供了基于Oracle9i Database而構(gòu)建的消息傳送功能。在第二種方案中,需要調(diào)用一個(gè)Web服務(wù)來確認(rèn)某些信息。PL/SQL程序?qū)⑹褂肁Q將要發(fā)送到外部程序的消息進(jìn)行排隊(duì)。因?yàn)橐粭l消息一經(jīng)成功地排入隊(duì)列,數(shù)據(jù)庫的一個(gè)事務(wù)就能完成,所以在這種方法中,使用AQ能高效地將處理過程分解成前臺處理和后臺處理。MDB是一種當(dāng)新消息到達(dá)時(shí)便自動被調(diào)用的EJB。我用MDB將消息退出隊(duì)列,并從Web服務(wù)檢索某些相關(guān)的數(shù)據(jù)。MDB會向Web服務(wù)發(fā)送一個(gè)SOAP調(diào)用并用已更改的或已更新的信息對數(shù)據(jù)庫進(jìn)行更新。使用MDB是訪問應(yīng)用程序服務(wù)器提供的服務(wù)的一個(gè)非常棒的手段。在第三種方案中,需要通知Java客戶端應(yīng)用程序數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生了變化,以便該應(yīng)用程序?qū)︼@示內(nèi)容進(jìn)行相應(yīng)的更新。和前一種方案一樣,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)PL/SQL觸發(fā)器會將消息排入隊(duì)列。Java提供Java Message Service (JMS)應(yīng)用編程接口(API)用于訪問消息傳送系統(tǒng)。我已經(jīng)創(chuàng)建了一個(gè)Java應(yīng)用程序來監(jiān)控?cái)?shù)據(jù)的變化。它用JMS將由PL/SQL觸發(fā)器放入AQ的消息從隊(duì)列中退出。更多的活動可在devtrends.oracle.com 中查找全部方案和工作代碼示例以便了解更多的關(guān)于現(xiàn)用數(shù)據(jù)庫的信息。
圖1: 工作示例應(yīng)用程序的體系結(jié)構(gòu)使用UTL_HTTPUTL_HTTP提供的軟件包使你能夠從SQL和PL/SQL調(diào)出HTTP。在第一種方案中,當(dāng)有新行插入到表格中時(shí)需要從遠(yuǎn)程網(wǎng)絡(luò)服務(wù)器上提取一個(gè)文件,并將該文件保存在本地文件系統(tǒng)中。servlet將URL作為參數(shù),來完成這項(xiàng)工作。A PL/SQL ON INSERT觸發(fā)器使用UTL_HTTP來調(diào)用該servlet(它運(yùn)行于Oracle9i應(yīng)用程序服務(wù)器上)。UTL_HTTP的使用可能只是一個(gè)簡單的單行調(diào)用,否則可以通過多個(gè)調(diào)用來處理諸如認(rèn)證、代理以及cookies這一類的復(fù)雜過程。我本可以使用UTL_HTTP來提取該文件和用UTL_FILE提供的軟件包來保存該文件。然而,使用servlet都有助于保護(hù)數(shù)據(jù)庫資源,并且使我有更多的調(diào)度選擇。一個(gè)servlet能完成的各種任務(wù)的其它例子還包括調(diào)用EnterPRise JavaBean(EJB)、給某人發(fā)送即時(shí)消息、操縱圖像、進(jìn)行CORBA調(diào)用。使用高級排隊(duì)功能 在數(shù)據(jù)庫外面啟動處理過程的另一個(gè)方法是將消息排入隊(duì)列等候外部處理。AQ提供了基于Oracle9i Database而構(gòu)建的消息傳送功能。在第二種方案中,需要調(diào)用一個(gè)Web服務(wù)來確認(rèn)某些信息。PL/SQL程序?qū)⑹褂肁Q將要發(fā)送到外部程序的消息進(jìn)行排隊(duì)。因?yàn)橐粭l消息一經(jīng)成功地排入隊(duì)列,數(shù)據(jù)庫的一個(gè)事務(wù)就能完成,所以在這種方法中,使用AQ能高效地將處理過程分解成前臺處理和后臺處理。MDB是一種當(dāng)新消息到達(dá)時(shí)便自動被調(diào)用的EJB。我用MDB將消息退出隊(duì)列,并從Web服務(wù)檢索某些相關(guān)的數(shù)據(jù)。MDB會向Web服務(wù)發(fā)送一個(gè)SOAP調(diào)用并用已更改的或已更新的信息對數(shù)據(jù)庫進(jìn)行更新。使用MDB是訪問應(yīng)用程序服務(wù)器提供的服務(wù)的一個(gè)非常棒的手段。在第三種方案中,需要通知Java客戶端應(yīng)用程序數(shù)據(jù)庫中的數(shù)據(jù)發(fā)生了變化,以便該應(yīng)用程序?qū)︼@示內(nèi)容進(jìn)行相應(yīng)的更新。和前一種方案一樣,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)PL/SQL觸發(fā)器會將消息排入隊(duì)列。Java提供Java Message Service (JMS)應(yīng)用編程接口(API)用于訪問消息傳送系統(tǒng)。我已經(jīng)創(chuàng)建了一個(gè)Java應(yīng)用程序來監(jiān)控?cái)?shù)據(jù)的變化。它用JMS將由PL/SQL觸發(fā)器放入AQ的消息從隊(duì)列中退出。更多的活動可在devtrends.oracle.com 中查找全部方案和工作代碼示例以便了解更多的關(guān)于現(xiàn)用數(shù)據(jù)庫的信息。 新聞熱點(diǎn)
疑難解答
圖片精選