国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
在 J2EE 服務(wù)器環(huán)境中使用 Derby

在 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 日
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。

本文中 IBM Cloudscape 或 Derby 的稱謂
IBM Cloudscape 數(shù)據(jù)庫引擎 就是 Apache Derby 數(shù)據(jù)庫引擎。IBM Cloudscape 是在來自 Apache 的未經(jīng)修改的代碼行基礎(chǔ)上構(gòu)建的。關(guān)于這一點(diǎn)容易產(chǎn)生混淆,所以原來在本文中,每當(dāng)提到這種數(shù)據(jù)庫引擎時(shí),我都會同時(shí)給出這兩種產(chǎn)品名稱。但是,正如一個(gè)評審者所說的:“一次又一次地讀到 ‘Cloudscape 或 Derby’ 這個(gè)短語會讓人覺得乏味。”為解決這個(gè)問題,并讓本文讀起來更順暢,除了對 IBM Cloudscape 的特別討論外,其他地方我都采用慣用的簡稱“Derby”。

如今,大多數(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)
 

Derby 的不同之處

大多數(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 與 J2EE

下面的列表列出了使用 Derby 的一些關(guān)鍵優(yōu)點(diǎn)。要了解完整信息,請參閱本文 參考資料 小節(jié)中引用的“Tech Overview”。

  • Derby 是一種功能完備的關(guān)系數(shù)據(jù)庫,具有能與大型企業(yè)數(shù)據(jù)庫相抗衡的能力。不要讓它極小的規(guī)模(2 MB)和成本(0 美元)給騙了。
  • Derby 是純事務(wù)型的,當(dāng)和 J2EE 服務(wù)器的 JTA 事務(wù)管理器一起使用時(shí),可以參與全局(分布式)事務(wù)。
  • Derby 數(shù)據(jù)庫系統(tǒng)(二進(jìn)制文件和數(shù)據(jù)庫)可以復(fù)制到任何帶有 J2SE JVM 的平臺,并且無需重新編譯或作其他修改就能運(yùn)行。
  • 缺省配置下的 Derby 數(shù)據(jù)庫系統(tǒng)不需要進(jìn)行單獨(dú)的管理。它的引擎在 J2EE 服務(wù)器 JVM 進(jìn)程中運(yùn)行,成為系統(tǒng)集成的一部分。

在設(shè)計(jì)使用數(shù)據(jù)庫的應(yīng)用程序時(shí),首先做出的決定之一是如何訪問數(shù)據(jù)。J2SE 提供以下兩種方法來訪問帶有 JDBC 兼容驅(qū)動(dòng)程序的關(guān)系數(shù)據(jù)庫:

  1. 使用 JDBC 服務(wù)提供程序接口(SPI)。這意味著應(yīng)用程序使用 JDBC DataSource 接口來建立到數(shù)據(jù)庫的連接。對于 J2EE 應(yīng)用程序,這是可取的訪問方法,原因有以下幾點(diǎn):
    • 它允許程序代碼完全獨(dú)立于數(shù)據(jù)庫。驅(qū)動(dòng)程序信息、數(shù)據(jù)庫的位置和配置參數(shù)都是由 J2EE 服務(wù)器存儲的。
    • 它允許使用連接共享(即連接池)。J2EE 服務(wù)器連接管理器有效地管理連接,從而大大地提高性能和可伸縮性。
    • 它允許 Enterprise JavaBeans(EJB)使用數(shù)據(jù)庫來實(shí)現(xiàn) J2EE 服務(wù)器中的業(yè)務(wù)邏輯。雖然沒有要求實(shí)現(xiàn) EJB 層,但這樣做可以為建立高度可伸縮的分布式應(yīng)用程序架構(gòu)提供基礎(chǔ)。
  2. 直接來自應(yīng)用程序代碼。這意味著應(yīng)用程序使用 JDBC DriverManager 類來建立數(shù)據(jù)庫連接。獨(dú)立(不基于服務(wù)器)的數(shù)據(jù)庫應(yīng)用程序正是以這種方式來編寫的。這種應(yīng)用程序是自包含的,不依賴于來自應(yīng)用程序服務(wù)器的信息或服務(wù)。這種應(yīng)用程序也不會從應(yīng)用程序服務(wù)器 JDBC Service Provider 提供的可移植性和可伸縮性中受益。

使用 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)境。


將 Derby 用作 Resource Manager

本節(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ù)庫定義為受管資源的一般步驟是:

  1. 準(zhǔn)備數(shù)據(jù)庫:
    • 安裝 RDBMS。對于 Derby 來說,這意味著將 derby.jar 添加到應(yīng)用程序服務(wù)器目錄樹中。
    • 在必要時(shí)啟動(dòng) RDBMS。對于 Derby 來說,當(dāng)應(yīng)用程序服務(wù)器裝載 JDBC 驅(qū)動(dòng)程序時(shí),引擎將自動(dòng)啟動(dòng)。
    • 創(chuàng)建應(yīng)用程序數(shù)據(jù)庫。這通常是通過由數(shù)據(jù)庫的命令行處理工具(例如 IJ)處理的一個(gè) SQL 命令文件來完成的。
  2. 定義和部署應(yīng)用程序用來訪問數(shù)據(jù)庫的數(shù)據(jù)源。此時(shí),大多數(shù) J2EE 服務(wù)器將自動(dòng)做以下工作:
    • 注冊對象名稱到一個(gè)名稱服務(wù)器中。在應(yīng)用程序中,這個(gè)名稱用于替代任何特定于數(shù)據(jù)庫的信息,以建立到數(shù)據(jù)庫的連接。
    • 設(shè)置一個(gè)連接池。這個(gè)池對應(yīng)用程序是完全透明的,可以提高性能和可伸縮性。
  3. 啟動(dòng)數(shù)據(jù)源/連接器,或者配置應(yīng)用程序服務(wù)器,使之自動(dòng)啟動(dòng)。
  4. 使用用于連接的 JDBC DataSource 接口編寫應(yīng)用程序(或者使用容器管理的持久性,但那是另一個(gè)話題)。

在“定義和部署數(shù)據(jù)源”這一步中,需要提供特定于 RDBMS 和數(shù)據(jù)庫的信息,以便建立連接。完成這一步所需的基本信息有:

  • JDBC 驅(qū)動(dòng)程序庫的位置和名稱(例如:derby.jar)。
  • JDBC 驅(qū)動(dòng)程序類名(例如:org.apache.derby.jdbc.EmbeddedDriver)
  • 數(shù)據(jù)庫連接 URL (例如:jdbc:derby:Databases/JPetstoreDB)
  • 參數(shù)代碼(多數(shù)情況下是可選的)

捕捉數(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 子目錄 ...var/derby/Databases 中。該實(shí)現(xiàn)使用與 Gluecode 捆綁的 Apache Derby(可以在 ...repository/incubator-derby/jars 中找到)。

  1. 啟動(dòng) Gluecode 并訪問管理控制臺(URL:http://localhost:8080/console/login.html)。
  2. 在開始的 Information 屏幕中,單擊左側(cè)導(dǎo)航列表中的 Databases 鏈接(圖 2)。
圖 2. Gluecode 導(dǎo)航列表

  1. Database Connections 窗口中,單擊列表框底部的 Add New Datasource 鏈接。
  2. 為新數(shù)據(jù)源填入信息,如圖 3 所示。單擊 Create

圖 3. Gluecode 數(shù)據(jù)源定義屏幕

這就夠了?,F(xiàn)在,部署在服務(wù)器上的應(yīng)用程序便可以通過引用 JNDI 名稱來訪問這個(gè)數(shù)據(jù)庫,而不必管實(shí)際使用的是哪種 DBMS。


服務(wù)器中的 Resource Manager

當(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)程。

部署多個(gè)使用 Derby 的應(yīng)用程序

按照 Derby 的設(shè)計(jì),數(shù)據(jù)庫引擎(derby.jar)可以很容易地與應(yīng)用程序包捆綁在一起,成為隨應(yīng)用程序安裝的 jar 文件。這使得獨(dú)立應(yīng)用程序環(huán)境中的安裝可以一步到位,而不會導(dǎo)致任何問題。然而,如前所述,在應(yīng)用程序服務(wù)器環(huán)境中,由于數(shù)據(jù)庫引擎是嵌入在其中的,當(dāng)使用多個(gè)版本的 Derby 時(shí),可能引發(fā)問題。使用嵌入式 Derby 的一項(xiàng)重要原則是 “決不將來自多個(gè) derby.jar 副本的類裝載到同一個(gè) JVM 中”。

為了避免在需要部署多個(gè)提供 derby.jar 的應(yīng)用程序時(shí)出現(xiàn)問題,可以使用 sysinfo 命令(org.apache.derby.tools.sysinfo)來判斷哪個(gè)是更新版本的 Derby,并使用那個(gè) jarfile。軟升級(soft upgrade)特性可以使老版本 Derby 創(chuàng)建的數(shù)據(jù)庫與新版本兼容。不要在服務(wù)器系統(tǒng)中同時(shí)存在多個(gè) derby.jar。

由于這個(gè)原因,它容易受到應(yīng)用程序服務(wù)器內(nèi)部實(shí)現(xiàn)細(xì)節(jié)的影響,尤其容易受多個(gè)類裝載器的實(shí)現(xiàn)的影響。為了同時(shí)運(yùn)行多個(gè)應(yīng)用程序,并使這些應(yīng)用程序不致于相互干擾,應(yīng)用程序服務(wù)器使用多個(gè)類裝載器來提供必要的隔離。如果 Derby 系統(tǒng)的類是由用于支持單個(gè)應(yīng)用程序?qū)嵗?,而不支持所有?yīng)用程序?qū)嵗念愌b載器裝載的,那么它就會碰到問題。數(shù)據(jù)庫引擎類甚至可能跨多個(gè)類裝載器。這將導(dǎo)致數(shù)據(jù)庫引擎中止。由于數(shù)據(jù)庫是共享資源,因此應(yīng)該在比類裝載器更高的層次上裝載它。

類裝載器和類裝載器層次結(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)是一樣的。


結(jié)束語

現(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ù)

討論


關(guān)于作者

 

Stanley Bradbury 目前在 IBM 的 Cloudscape 小組擔(dān)任社區(qū)協(xié)調(diào)人的工作。在此之前,他為 Cloudscape 提供三級支持(2001 年到 2005 年)。在與 Cloudscape 打交道之前,他先后管理過生物技術(shù)、制造業(yè)和互聯(lián)網(wǎng)安全服務(wù)業(yè)的數(shù)據(jù)庫。他畢業(yè)于加州大學(xué) Berkeley 分校,喜歡和家人呆在一起。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Cloudscape數(shù)據(jù)庫介紹及幾個(gè)問題
Cloudscape 與 Ajax 示例
j2ee的13種核心技術(shù)
用 SyncML 進(jìn)行異構(gòu)數(shù)據(jù)庫復(fù)制
Windows2000下安裝J2EE和部署J2EE應(yīng)用程序
PreparedStatement
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服