程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在J2EE服務器環境中使用Derby

在J2EE服務器環境中使用Derby

編輯:關於JAVA

簡介

應用程序服務器(也稱 app server)作為一種為不同位置、使用不同類型計算機的用 戶提供信息和服務的方法,正得到越來越多人的青睐。通常,應用程序服務器位於數據庫 或其他信息存儲(即後端)與終端用戶/客戶(即客戶機)的中間,從而形成一種“三層 架構”。本文討論如何在一個使用基於 Sun Java Enterprise Edition(J2EE)規范的應 用程序服務器系統中,建立作為該系統後端的 IBM Cloudscape 或 Derby 數據庫。在這 裡描述的配置中,數據庫管理系統(DBMS)也可能被稱作 Resource Manager。

如今,大多數應用程序服務器都基於 J2EE 規范,但也有一些屬於其他類型。基於 J2EE 的系統的流行起因於它們的非專有性。它們很快為開放源碼和開放架構社區所采納 。這些通用服務器繼承了 Java “隨處運行”的能力。由於 IBM Cloudscape 引擎(即 Apache Derby 引擎)也是以 Java 實現的,因而可以干淨利落地進行集成,並且能不作 修改地在任何有 J2EE 服務器的地方運行。

如果您有應用程序服務器方面的經驗,那麼可以跳過接下來的段落。否則,還是應該 閱讀一下這個段落,因為它簡要地給出了應用程序服務器系統的概念,這有助於理解本文 的後續部分。為了理解這個主題,您可以把 J2EE 應用程序服務器想象成“運行”一個或 多個基於 Java 的應用程序的中間軟件。它組合(捆綁)了支持應用程序和允許連接到網 絡的用戶安全地使用應用程序所需的不同技術。應用程序服務器管理中間層組件,這些組 件負責執行大部分重頭任務。而客戶層通常是使用 Web 浏覽器與中間層“交談”的人。 而在中間層的後面,受中間層保護的是一個業務系統,即後端,最近也被稱作 Enterprise Information System (EIS)層。在應用程序服務器中運行的應用程序可以 使用很多種應用程序編程接口(API)來編寫,最常見的有 Java(J2SE)例程、Java Server Page(JSP)和 Servlet。無論使用何種 API,應用程序都可以訪問為應用程序服 務器環境定義的數據庫。圖 1 展示了一個描繪這三層和一些組件的簡化視圖。本文主要 關注中間層和 EIS 層。

圖 1. 三層架構

Derby 的不同之處

大多數 J2EE 應用程序都需要存儲數據,管理數據的最常見的方法是使用遵從 JDBC 規范的數據庫。任何帶 JDBC 驅動程序接口的數據庫都可以與 J2EE 應用程序服務器集成 ,以創建 J2EE 術語中所謂的“Resource Manager”(RM)。Derby 引擎非常適合 Resource Manager 的角色。它被設計成在較大型系統中使用的關系數據庫組件,這正是 常用於描述 Derby 的術語“嵌入式數據庫”所指的意思。當在一個 J2EE 服務器中實現 (嵌入)時,它將成為該服務器中實現(部署)的應用程序可以利用的專用工具。

J2EE 服務器為網絡通信和安全性提供支持,它們可以根據系統需求進行配置。Derby 引擎不提供這些功能,但是樂於利用服務器環境中的這些服務。很多數據庫系統二進制文 件中的很大一部分代碼都是支持 J2EE 系統中已經存在的系統安全和網絡通信功能。 Derby 占用的內存很少,因為它的庫沒有包含這些代碼。當 Derby 被嵌入到一個 J2EE 服務器中時,只需使整個服務器系統所占的內存增加 2 MB,就可以創建一個功能完備的 遵從 JDBC 的 Resource Manager 。

Derby 與 J2EE

下面的列表列出了使用 Derby 的一些關鍵優點。要了解完整信息,請參閱本文 參考 資料 小節中引用的“Tech Overview”。

Derby 是一種功能完備的關系數據庫,具有能與大型企業數據庫相抗衡的能力。不要 讓它極小的規模(2 MB)和成本(0 美元)給騙了。

Derby 是純事務型的,當和 J2EE 服務器的 JTA 事務管理器一起使用時,可以參與全 局(分布式)事務。

Derby 數據庫系統(二進制文件和數據庫)可以復制到任何帶有 J2SE JVM 的平台, 並且無需重新編譯或作其他修改就能運行。

缺省配置下的 Derby 數據庫系統不需要進行單獨的管理。它的引擎在 J2EE 服務器 JVM 進程中運行,成為系統集成的一部分。

在設計使用數據庫的應用程序時,首先做出的決定之一是如何訪問數據。J2SE 提供以 下兩種方法來訪問帶有 JDBC 兼容驅動程序的關系數據庫:

使用 JDBC 服務提供程序接口(SPI)。這意味著應用程序使用 JDBC DataSource 接 口來建立到數據庫的連接。對於 J2EE 應用程序,這是可取的訪問方法,原因有以下幾點 :

它允許程序代碼完全獨立於數據庫。驅動程序信息、數據庫的位置和配置參數都是由 J2EE 服務器存儲的。

它允許使用連接共享(即連接池)。J2EE 服務器連接管理器有效地管理連接,從而大 大地提高性能和可伸縮性。

它允許 Enterprise JavaBeans(EJB)使用數據庫來實現 J2EE 服務器中的業務邏輯 。雖然沒有要求實現 EJB 層,但這樣做可以為建立高度可伸縮的分布式應用程序架構提 供基礎。

直接來自應用程序代碼。這意味著應用程序使用 JDBC DriverManager 類來建立數據 庫連接。獨立(不基於服務器)的數據庫應用程序正是以這種方式來編寫的。這種應用程 序是自包含的,不依賴於來自應用程序服務器的信息或服務。這種應用程序也不會從應用 程序服務器 JDBC Service Provider 提供的可移植性和可伸縮性中受益。

使用 J2EE 應用程序服務器的主要優點在於它簡化了對用於數據庫訪問的 JDBC SPI 的使用。大多數業務程序員都不願意,為了使用 JDBC SPI 而編寫他們自己的數據源和連 接池代碼,並實現一個命名的服務器。實際上,更高效的方法是建立一個應用程序服務器 環境。

將 Derby 用作 Resource Manager

本節展示如何使用 JDBC 服務提供程序接口(SPI)將 Derby 設置為 J2EE Resource Manager 。除了前面列出的諸多優點以外,使用 JDBC SPI 來支持 Derby 嵌入式驅動程 序還可以避免由應用程序服務器引擎內實現的安全性和隔離措施導致的潛在問題(請參閱 應用程序服務器中的 Resource Manager 小節,以獲得更多信息)。將一個數據庫定義為 受管資源的一般步驟是:

准備數據庫:

安裝 RDBMS。對於 Derby 來說,這意味著將 derby.jar 添加到應用程序服務器目錄 樹中。

在必要時啟動 RDBMS。對於 Derby 來說,當應用程序服務器裝載 JDBC 驅動程序時, 引擎將自動啟動。

創建應用程序數據庫。這通常是通過由數據庫的命令行處理工具(例如 IJ)處理的一 個 SQL 命令文件來完成的。

定義和部署應用程序用來訪問數據庫的數據源。此時,大多數 J2EE 服務器將自動做 以下工作:

注冊對象名稱到一個名稱服務器中。在應用程序中,這個名稱用於替代任何特定於數 據庫的信息,以建立到數據庫的連接。

設置一個連接池。這個池對應用程序是完全透明的,可以提高性能和可伸縮性。

啟動數據源/連接器,或者配置應用程序服務器,使之自動啟動。

使用用於連接的 JDBC DataSource 接口編寫應用程序(或者使用容器管理的持久性, 但那是另一個話題)。

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

JDBC 驅動程序庫的位置和名稱(例如:derby.jar)。

JDBC 驅動程序類名(例如:org.apache.derby.jdbc.EmbeddedDriver)

數據庫連接 URL (例如:jdbc:derby:Databases/JPetstoreDB)

參數代碼( 多數情況下是可選的)

捕捉數據源信息和部署數據源的過程會隨著 J2EE 服務器 的不同而不同。很多系統有一個控制台應用程序來幫助定義和部署數據源。下一節展示了 如何使用 Gluecode Standard Edition Console 來設置數據源。在後面的 參考資料 小 節中,通過相應的鏈接可以找到關於將 Derby 設置為 IBM WebSphere® 和 Apache Geronimo 中的 Resource Manager 的手冊說明。

使用 Gluecode Standard Edition 設置 Derby Resource Manager

Gluecode Standard Edition 是一種集成 了很多開放源碼技術的應用程序服務器。它簡化了 J2EE 環境中 Java 應用程序的部署和 管理。Gluecode 捆綁了 Apache Geronimo J2EE 服務器,並提供了一個 GUI 管理控制台 ,用於連接 Resource Manager 和部署應用程序(要了解關於獲得和使用 Gluecode 的信 息,請訪問 參考資料 小節中的 Gluecode 鏈接)。下面的步驟概括了為一個名為 JPetstoreDB 的 Derby 數據庫創建數據源的過程。對於這個例子,必須將該數據庫復制 到 Gluecode 子目錄 ...var/derby/Databases 中。該實現使用與 Gluecode 捆綁的 Apache Derby(可以在 ...repository/incubator-derby/jars 中找到)。

啟動 Gluecode 並訪問管理控制台(URL:http://localhost:8080/console/login.html)。

在開始的 Information 屏幕中,單擊左側導航列表中的 Databases 鏈接(圖 2 )。

圖 2. Gluecode 導航列表

在 Database Connections 窗口中,單擊列表框底部的 Add New Datasource 鏈接。

為新數據源填入信息,如圖 3 所示。單擊 Create。

圖 3. Gluecode 數據源定義屏幕

這就夠了。現在,部署在服務器上的應用程序便可以通過引用 JNDI 名稱來訪問這個 數據庫,而不必管實際使用的是哪種 DBMS。

服務器中的 Resource Manager

當按照以上描述完成配置之後,Derby 數據庫使應用程序服務器層與 EIS 層之間的差 別模糊化。與大多數其他 RDBMS 不同,它是在應用程序服務器 JVM 中運行的 Java 程序 (嵌入式的),而不是在它自己的地址空間內單獨運行的進程。由於這個原因,它容易受 到應用程序服務器內部實現細節的影響,尤其容易受多個類裝載器的實現的影響。為了同 時運行多個應用程序,並使這些應用程序不致於相互干擾,應用程序服務器使用多個類裝 載器來提供必要的隔離。如果 Derby 系統的類是由用於支持單個應用程序實例,而不支 持所有應用程序實例的類裝載器裝載的,那麼它就會碰到問題。數據庫引擎類甚至可能跨 多個類裝載器。這將導致數據庫引擎中止。由於數據庫是共享資源,因此應該在比類裝載 器更高的層次上裝載它。

類裝載器和類裝載器層次結構是一個復雜的話題,其中有更多的細節不是本文所能論 述的(要了解關於此話題的更多信息,請訪問後面 參考資料 小節中的“J2EE Class Loading Demystified”鏈接)。然而,需要注意的是,對類裝載器的使用會隨著應用程 序服務器的不同而不同,因此,即使一個直接裝載 Derby 驅動程序的應用程序在某個服 務器上可以運行得很好,但當部署到另一個應用程序服務器上時,可能無法運行。而通過 服務提供程序接口建立數據庫連接,無論應用程序服務器如何管理類裝載器層次結構,都 可以保證應用程序在不同應用程序服務器環境之間是可移植的。

如果應用程序架構使您不能使用服務提供程序接口,或者需要將數據庫處理負載分布 到另一台機器上,那麼可以結合 Network Server 來使用 Derby。Derby Network Server 在一個與 J2EE 服務器分離的進程中運行 Derby。Network Server 給系統引入了一些復 雜性,因為它需要單獨啟動,單獨實現驗證和一組安全策略(這些事情通常由 J2EE 服務 器來處理)。當使用 Derby Network Server 時,還要求使用這裡沒有提到的不同的 JAR 文件和數據庫連接 URL 語法。嵌入在 Derby Network Server 中的 Derby 引擎在一個標 准的客戶機-服務器架構中運行,這和大多數其他數據庫系統是一樣的。

結束語

現在有很多 J2EE 應用程序服務器,它們各自捆綁了“自己”的一組 Java 技術產品 和服務。要想了解有哪些可用的應用程序服務器,可以訪問後面“參考資料”小節中的“ Application Server Matrix”鏈接。每種服務器都為使用相互配合的不同技術提供了簡 化的接口。大多數應用程序服務器都支持本文描述的數據源和連接池的創建。

大多數 J2EE 應用程序服務器中具有的另一個重要特性是,至少通過 Servlet 和 Java Server Page(JSP)提供對服務器端處理的支持。J2EE 服務器中可能出現的其他服 務和技術有 EJB、連接器、JMS、JTA 等。當出現新的技術和標准時,它們也將被並入到 這些應用程序服務器中。由於這種技術的范圍是如此之廣,發展是如此之快,所以很多人 第一次面臨 J2EE 時變得不知所措也就毫不奇怪了。和所有復雜的系統一樣,最好的選擇 是逐步熟悉 J2EE。本文提供的信息是對 J2EE 架構較基本的一種介紹。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved