在 J2EE 服務(wù)器環(huán)境中使用 Derby在 J2EE 應(yīng)用程序服務(wù)器中將 Derby 設(shè)置為 Resource Manager ![]() |
![]() | 級別: 中級 Stanley Bradbury (bradbury@us.ibm.com), 社區(qū)協(xié)調(diào)人 - Cloudscape, IBM 2005 年 11 月 24 日 IBM® Cloudscape™ 是免費(fèi)提供的 Apache Derby 關(guān)系數(shù)據(jù)庫管理器的改裝產(chǎn)品。J2EE™ 服務(wù)器是基于 Sun 的 Java Enterprise Edition(J2EE)規(guī)范的中間件軟件,它將很多 Java Service 技術(shù)捆綁在一個(gè)集成的系統(tǒng)中。大多數(shù) J2EE 應(yīng)用程序要求有一個(gè)與 J2EE 服務(wù)器集成的遵從 JDBC 規(guī)范的數(shù)據(jù)庫,以便存儲信息。本文展示如何最恰當(dāng)?shù)貙?Cloudscape 或 Derby 應(yīng)用到 J2EE 環(huán)境中。 應(yīng)用程序服務(wù)器(也稱 app server)作為一種為不同位置、使用不同類型計(jì)算機(jī)的用戶提供信息和服務(wù)的方法,正得到越來越多人的青睞。通常,應(yīng)用程序服務(wù)器位于數(shù)據(jù)庫或其他信息存儲(即后端)與終端用戶/客戶(即客戶機(jī))的中間,從而形成一種“三層架構(gòu)”。本文討論如何在一個(gè)使用基于 Sun Java Enterprise Edition(J2EE)規(guī)范的應(yīng)用程序服務(wù)器系統(tǒng)中,建立作為該系統(tǒng)后端的 IBM Cloudscape 或 Derby 數(shù)據(jù)庫。在這里描述的配置中,數(shù)據(jù)庫管理系統(tǒng)(DBMS)也可能被稱作 Resource Manager。
如今,大多數(shù)應(yīng)用程序服務(wù)器都基于 J2EE 規(guī)范,但也有一些屬于其他類型?;?J2EE 的系統(tǒng)的流行起因于它們的非專有性。它們很快為開放源碼和開放架構(gòu)社區(qū)所采納。這些通用服務(wù)器繼承了 Java “隨處運(yùn)行”的能力。由于 IBM Cloudscape 引擎(即 Apache Derby 引擎)也是以 Java 實(shí)現(xiàn)的,因而可以干凈利落地進(jìn)行集成,并且能不作修改地在任何有 J2EE 服務(wù)器的地方運(yùn)行。 如果您有應(yīng)用程序服務(wù)器方面的經(jīng)驗(yàn),那么可以跳過接下來的段落。否則,還是應(yīng)該閱讀一下這個(gè)段落,因?yàn)樗喴亟o出了應(yīng)用程序服務(wù)器系統(tǒng)的概念,這有助于理解本文的后續(xù)部分。為了理解這個(gè)主題,您可以把 J2EE 應(yīng)用程序服務(wù)器想象成“運(yùn)行”一個(gè)或多個(gè)基于 Java 的應(yīng)用程序的中間軟件。它組合(捆綁)了支持應(yīng)用程序和允許連接到網(wǎng)絡(luò)的用戶安全地使用應(yīng)用程序所需的不同技術(shù)。應(yīng)用程序服務(wù)器管理中間層組件,這些組件負(fù)責(zé)執(zhí)行大部分重頭任務(wù)。而客戶層通常是使用 Web 瀏覽器與中間層“交談”的人。而在中間層的后面,受中間層保護(hù)的是一個(gè)業(yè)務(wù)系統(tǒng),即后端,最近也被稱作 Enterprise Information System (EIS)層。在應(yīng)用程序服務(wù)器中運(yùn)行的應(yīng)用程序可以使用很多種應(yīng)用程序編程接口(API)來編寫,最常見的有 Java(J2SE)例程、Java Server Page(JSP)和 Servlet。無論使用何種 API,應(yīng)用程序都可以訪問為應(yīng)用程序服務(wù)器環(huán)境定義的數(shù)據(jù)庫。圖 1 展示了一個(gè)描繪這三層和一些組件的簡化視圖。本文主要關(guān)注中間層和 EIS 層。 圖 1. 三層架構(gòu) ![]() 大多數(shù) J2EE 應(yīng)用程序都需要存儲數(shù)據(jù),管理數(shù)據(jù)的最常見的方法是使用遵從 JDBC 規(guī)范的數(shù)據(jù)庫。任何帶 JDBC 驅(qū)動(dòng)程序接口的數(shù)據(jù)庫都可以與 J2EE 應(yīng)用程序服務(wù)器集成,以創(chuàng)建 J2EE 術(shù)語中所謂的“Resource Manager”(RM)。Derby 引擎非常適合 Resource Manager 的角色。它被設(shè)計(jì)成在較大型系統(tǒng)中使用的關(guān)系數(shù)據(jù)庫組件,這正是常用于描述 Derby 的術(shù)語“嵌入式數(shù)據(jù)庫”所指的意思。當(dāng)在一個(gè) J2EE 服務(wù)器中實(shí)現(xiàn)(嵌入)時(shí),它將成為該服務(wù)器中實(shí)現(xiàn)(部署)的應(yīng)用程序可以利用的專用工具。 J2EE 服務(wù)器為網(wǎng)絡(luò)通信和安全性提供支持,它們可以根據(jù)系統(tǒng)需求進(jìn)行配置。Derby 引擎不提供這些功能,但是樂于利用服務(wù)器環(huán)境中的這些服務(wù)。很多數(shù)據(jù)庫系統(tǒng)二進(jìn)制文件中的很大一部分代碼都是支持 J2EE 系統(tǒng)中已經(jīng)存在的系統(tǒng)安全和網(wǎng)絡(luò)通信功能。Derby 占用的內(nèi)存很少,因?yàn)樗膸鞗]有包含這些代碼。當(dāng) Derby 被嵌入到一個(gè) J2EE 服務(wù)器中時(shí),只需使整個(gè)服務(wù)器系統(tǒng)所占的內(nèi)存增加 2 MB,就可以創(chuàng)建一個(gè)功能完備的遵從 JDBC 的 Resource Manager 。 下面的列表列出了使用 Derby 的一些關(guān)鍵優(yōu)點(diǎn)。要了解完整信息,請參閱本文 參考資料 小節(jié)中引用的“Tech Overview”。
在設(shè)計(jì)使用數(shù)據(jù)庫的應(yīng)用程序時(shí),首先做出的決定之一是如何訪問數(shù)據(jù)。J2SE 提供以下兩種方法來訪問帶有 JDBC 兼容驅(qū)動(dòng)程序的關(guān)系數(shù)據(jù)庫:
使用 J2EE 應(yīng)用程序服務(wù)器的主要優(yōu)點(diǎn)在于它簡化了對用于數(shù)據(jù)庫訪問的 JDBC SPI 的使用。大多數(shù)業(yè)務(wù)程序員都不愿意,為了使用 JDBC SPI 而編寫他們自己的數(shù)據(jù)源和連接池代碼,并實(shí)現(xiàn)一個(gè)命名的服務(wù)器。實(shí)際上,更高效的方法是建立一個(gè)應(yīng)用程序服務(wù)器環(huán)境。 本節(jié)展示如何使用 JDBC 服務(wù)提供程序接口(SPI)將 Derby 設(shè)置為 J2EE Resource Manager 。除了前面列出的諸多優(yōu)點(diǎn)以外,使用 JDBC SPI 來支持 Derby 嵌入式驅(qū)動(dòng)程序還可以避免由應(yīng)用程序服務(wù)器引擎內(nèi)實(shí)現(xiàn)的安全性和隔離措施導(dǎo)致的潛在問題(請參閱 應(yīng)用程序服務(wù)器中的 Resource Manager 小節(jié),以獲得更多信息)。將一個(gè)數(shù)據(jù)庫定義為受管資源的一般步驟是:
在“定義和部署數(shù)據(jù)源”這一步中,需要提供特定于 RDBMS 和數(shù)據(jù)庫的信息,以便建立連接。完成這一步所需的基本信息有:
捕捉數(shù)據(jù)源信息和部署數(shù)據(jù)源的過程會隨著 J2EE 服務(wù)器的不同而不同。很多系統(tǒng)有一個(gè)控制臺應(yīng)用程序來幫助定義和部署數(shù)據(jù)源。下一節(jié)展示了如何使用 Gluecode Standard Edition Console 來設(shè)置數(shù)據(jù)源。在后面的 參考資料 小節(jié)中,通過相應(yīng)的鏈接可以找到關(guān)于將 Derby 設(shè)置為 IBM WebSphere® 和 Apache Geronimo 中的 Resource Manager 的手冊說明。 使用 Gluecode Standard Edition 設(shè)置 Derby Resource Manager Gluecode Standard Edition 是一種集成了很多開放源碼技術(shù)的應(yīng)用程序服務(wù)器。它簡化了 J2EE 環(huán)境中 Java 應(yīng)用程序的部署和管理。Gluecode 捆綁了 Apache Geronimo J2EE 服務(wù)器,并提供了一個(gè) GUI 管理控制臺,用于連接 Resource Manager 和部署應(yīng)用程序(要了解關(guān)于獲得和使用 Gluecode 的信息,請?jiān)L問 參考資料 小節(jié)中的 Gluecode 鏈接)。下面的步驟概括了為一個(gè)名為 JPetstoreDB 的 Derby 數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)源的過程。對于這個(gè)例子,必須將該數(shù)據(jù)庫復(fù)制到 Gluecode 子目錄
![]()
圖 3. Gluecode 數(shù)據(jù)源定義屏幕 ![]() 這就夠了?,F(xiàn)在,部署在服務(wù)器上的應(yīng)用程序便可以通過引用 JNDI 名稱來訪問這個(gè)數(shù)據(jù)庫,而不必管實(shí)際使用的是哪種 DBMS。 當(dāng)按照以上描述完成配置之后,Derby 數(shù)據(jù)庫使應(yīng)用程序服務(wù)器層與 EIS 層之間的差別模糊化。與大多數(shù)其他 RDBMS 不同,它是在應(yīng)用程序服務(wù)器 JVM 中運(yùn)行的 Java 程序(嵌入式的),而不是在它自己的地址空間內(nèi)單獨(dú)運(yùn)行的進(jìn)程。
類裝載器和類裝載器層次結(jié)構(gòu)是一個(gè)復(fù)雜的話題,其中有更多的細(xì)節(jié)不是本文所能論述的(要了解關(guān)于此話題的更多信息,請?jiān)L問后面 參考資料 小節(jié)中的“J2EE Class Loading Demystified”鏈接)。然而,需要注意的是,對類裝載器的使用會隨著應(yīng)用程序服務(wù)器的不同而不同,因此,即使一個(gè)直接裝載 Derby 驅(qū)動(dòng)程序的應(yīng)用程序在某個(gè)服務(wù)器上可以運(yùn)行得很好,但當(dāng)部署到另一個(gè)應(yīng)用程序服務(wù)器上時(shí),可能無法運(yùn)行。而通過服務(wù)提供程序接口建立數(shù)據(jù)庫連接,無論應(yīng)用程序服務(wù)器如何管理類裝載器層次結(jié)構(gòu),都可以保證應(yīng)用程序在不同應(yīng)用程序服務(wù)器環(huán)境之間是可移植的。 如果應(yīng)用程序架構(gòu)使您不能使用服務(wù)提供程序接口,或者需要將數(shù)據(jù)庫處理負(fù)載分布到另一臺機(jī)器上,那么可以結(jié)合 Network Server 來使用 Derby。Derby Network Server 在一個(gè)與 J2EE 服務(wù)器分離的進(jìn)程中運(yùn)行 Derby。Network Server 給系統(tǒng)引入了一些復(fù)雜性,因?yàn)樗枰獑为?dú)啟動(dòng),單獨(dú)實(shí)現(xiàn)驗(yàn)證和一組安全策略(這些事情通常由 J2EE 服務(wù)器來處理)。當(dāng)使用 Derby Network Server 時(shí),還要求使用這里沒有提到的不同的 JAR 文件和數(shù)據(jù)庫連接 URL 語法。嵌入在 Derby Network Server 中的 Derby 引擎在一個(gè)標(biāo)準(zhǔn)的客戶機(jī)-服務(wù)器架構(gòu)中運(yùn)行,這和大多數(shù)其他數(shù)據(jù)庫系統(tǒng)是一樣的。 現(xiàn)在有很多 J2EE 應(yīng)用程序服務(wù)器,它們各自捆綁了“自己”的一組 Java 技術(shù)產(chǎn)品和服務(wù)。要想了解有哪些可用的應(yīng)用程序服務(wù)器,可以訪問后面“參考資料”小節(jié)中的“Application Server Matrix”鏈接。每種服務(wù)器都為使用相互配合的不同技術(shù)提供了簡化的接口。大多數(shù)應(yīng)用程序服務(wù)器都支持本文描述的數(shù)據(jù)源和連接池的創(chuàng)建。 大多數(shù) J2EE 應(yīng)用程序服務(wù)器中具有的另一個(gè)重要特性是,至少通過 Servlet 和 Java Server Page(JSP)提供對服務(wù)器端處理的支持。J2EE 服務(wù)器中可能出現(xiàn)的其他服務(wù)和技術(shù)有 EJB、連接器、JMS、JTA 等。當(dāng)出現(xiàn)新的技術(shù)和標(biāo)準(zhǔn)時(shí),它們也將被并入到這些應(yīng)用程序服務(wù)器中。由于這種技術(shù)的范圍是如此之廣,發(fā)展是如此之快,所以很多人第一次面臨 J2EE 時(shí)變得不知所措也就毫不奇怪了。和所有復(fù)雜的系統(tǒng)一樣,最好的選擇是逐步熟悉 J2EE。本文提供的信息是對 J2EE 架構(gòu)較基本的一種介紹。 學(xué)習(xí)
獲得產(chǎn)品和技術(shù)
討論
|