Oracle數(shù)據(jù)庫內(nèi)啟用基于Java的實際存儲過程解析
以下的文章主要涉及到Oracle數(shù)據(jù)庫的開發(fā)人員,講述JAVA的存儲過程,以及利用Java的存儲過程來溝通SQL、和XML、Java、J2EE和Web服務。存儲過程(stored procedure)允許將運行于數(shù)據(jù)庫層中的持久性邏輯與運行于中間層中的商務邏輯有效地分離開來。
這種分離可以降低整個應用程序的復雜性,并提供其重用性、安全性、性能和可伸縮性。
但是,妨礙存儲過程廣泛采用的一個主要障礙是不同數(shù)據(jù)庫廠商使用各種專有的、且依賴于數(shù)據(jù)庫的實現(xiàn)語言。使用基于Java的存儲過程可以解決這一問題。Oracle已經(jīng)實現(xiàn)了ANSI標準,這些標準規(guī)定了從SQL中將靜態(tài)Java方法作為過程或函數(shù)進行調(diào)用的能力。這種實現(xiàn)被簡單地稱作"Java存儲過程"。
在本文中,你將了解基于Java的存儲過程如何幫助簡化商務邏輯、提高其性能,并擴展數(shù)據(jù)庫的功能。本文將介紹Oracle數(shù)據(jù)庫如何在數(shù)據(jù)庫內(nèi)啟用基于Java的存儲過程。還會介紹Java存儲過程如何訪問數(shù)據(jù),以及如何創(chuàng)建基本Java存儲過程。
選擇PL/SQL還是Java
在考慮Oracle存儲過程時,你可能會想到PL/SQL。不過,從Oracle8i開始,Oracle數(shù)據(jù)庫已經(jīng)在數(shù)據(jù)庫中支持Java,從而為存儲過程提供了不同于PL/SQL的開放式和可移植的方法。我可以聽到"$64 000問題":"我如何在PL/SQL和Java之間做出選擇?我是否應當忘記已經(jīng)學習的所有PL/SQL相關知識,而變?yōu)橐粋€Java天地的新手?"
兩種語言都適用于數(shù)據(jù)庫編程,都有自己的優(yōu)點和弱點。在決定選擇哪一種語言時,可以參考下面根據(jù)經(jīng)驗得出的通用規(guī)則:
對于要求與SQL進行無縫集成的數(shù)據(jù)庫中心來說則邏輯使用PL/SQL,從而完成對數(shù)據(jù)庫對象、類型和特性的訪問。
出于與數(shù)據(jù)庫的無關性考慮時,可以選擇Java作為開放式的語言來取代PL/SQL,同時也為了集成和溝通SQL、XML、J2EE和Web服務等各個領域。
OralceJVM使得Java可以運行在數(shù)據(jù)庫中
從Oracle8i版本1(Oralce8.1.5)開始,Oracle便提供緊密集成的Java虛擬機(JVM),JVM支持Oralce的數(shù)據(jù)庫會話期結(jié)構。任何數(shù)據(jù)庫對話期都可以在第一Java代碼調(diào)用時啟動一個虛擬上專用的JVM,后續(xù)的用戶可以使用這一已經(jīng)存在的支持Java的會話期。
事實上,所有會話共享同一JVM代碼并保持"僅靜態(tài)"的私有狀態(tài),而垃圾則收集在單個對話期空間內(nèi),從而為各個Java對話期提供了和SQL操作相同的對話期隔離和數(shù)據(jù)完整性能力。這里,不需要為了數(shù)據(jù)完整性而進行單獨的Java支持的過程。這一基于對話期的結(jié)構提供了較小的內(nèi)存占用率,并使OracleJVM具有與Oracle數(shù)據(jù)庫一樣的線性SMP可伸縮性。
【編輯推薦】