Sun Java System Application Server Enterprise Edition 8.2 管理指南

第 3 章 JDBC 資源

JDBC 資源 (資料源) 為應用程式提供連線至資料庫的方法。通常,管理員要為部署在網域中的應用程式存取的每個資料庫建立 JDBC 資源。(但是,可以為一個資料庫建立多個 JDBC 資源。)

本章包括下列小節:

建立 JDBC 資源

為了儲存、組織和擷取資料,大多數應用程式均使用關聯式資料庫。Java EE 應用程式透過 JDBC API 存取關聯式資料庫。

JDBC 資源 (資料源) 為應用程式提供連線至資料庫的方法。建立 JDBC 資源之前,先建立 JDBC 連線池。

若要建立 JDBC 資源,請指定識別資源的專屬 JNDI 名稱。JDBC 資源的 JNDI 名稱應在 java:comp/env/jdbc 子環境中 。例如,薪水帳單資料庫資源的 JNDI 名稱可為 java:comp/env/jdbc/payrolldb。由於所有資源 JNDI 名稱均在 java:comp/env 子環境中,因此在 Administration Console 中指定 JDBC 資源的 JNDI 名稱時,僅需輸入 jdbc/name。例如,對於薪水帳單資料庫,可指定 jdbc/payrolldb

若要使用 Admin Console 來建立 JDBC 資源,請選取 [資源] > [JDBC 資源]。指定資源設定,如下所示:

若要使用指令行公用程式建立 JDBC 資源,請使用 create-jdbc-resource 指令。

建立 JDBC 連線池

若要建立 JDBC 資源,請指定與其關聯的連線池。多個 JDBC 資源可指定單一連線池。

JDBC 連線池是針對特定資料庫的一組可重複使用的連線。由於每建立一個新的實體連線都會耗費時間,因此伺服器維護了可用連線池以提高效能。當應用程式請求連線時,它可以從池中取得一個連線。應用程式關閉連線時,連線將傳回池中。

在您建立連線池時,實際上就是在定義與特定資料庫連線的相關事項。建立池之前,您必須首先安裝並整合 JDBC 驅動程式。連線池的特性可能會隨資料庫供應商的不同而有所不同。某些特性是通用的,例如資料庫名稱 (URL)、使用者名稱和密碼。

必須輸入 JDBC 驅動程式和資料庫供應商的特定資料。繼續操作之前,請先收集以下資訊:

JDBC 連線池是針對特定資料庫的一組可重複使用的連線。使用 Administration Console 建立連線池時,管理員實際上是在定義與特定資料庫的連線的各個方面。

建立池之前,您必須首先安裝並整合 JDBC 驅動程式。建置 [建立連線池] 頁面時,必須輸入特定於 JDBC 驅動程式和資料庫供應商的特定資料。繼續操作之前,請先收集以下資訊:

定義您所安裝的 JDBC 驅動程式所指定的一般設定值。這些設定是 Java 程式設計語言中的類別名稱或介面名稱。

參數

說明

DataSource Class Name

實作 DataSource 和/或 XADataSource API 的供應商特定的類別名稱。該類別位於 JDBC 驅動程式中。

Resource Type

選項包括 javax.sql.DataSource (僅限於本機作業事件)、javax.sql.XADataSource (全域作業事件) 和 java.sql.ConnectionPoolDataSource (本機作業事件,可能會改善效能)。

另外,您必須定義一組常駐於池中的實體資料庫連線。應用程式請求連線時,將從池中移除該連線;而應用程式釋放該連線之後,連線將傳回到池中。

參數

說明

池的初始大小和最小大小 

池中連線的最小數目。該值還確定了首次建立池或應用程式伺服器啟動時置於池中的連線的數目。 

池的最大大小 

池中連線的最大數目。 

池設定大小數量 

當池向最小池大小收縮時,將成批調整大小。此值確定批次中的連線數目。將該值設置過大會延遲連線循環;而將該值設置過小則會導致效率降低。 

閒置逾時 

連線可以在儲存區中閒置的最大時間 (以秒表示)。一旦超過此時間,即從池中移除該連線。 

最長等待時間 

請求連線的應用程式在達到連線逾時之前等待的時間。由於預設等待時間過長,應用程式可能會出現無限期當機的情況。 

選擇性地,應用程式伺服器可以在將連線傳送給應用程式之前驗證連線。當由於網路出現故障或資料庫伺服器當機造成資料庫不可用時,此驗證可允許 Application Server 自動重新建立資料庫連線。連線驗證會耗用額外的時間,並會略微降低效能。

參數

說明

連線驗證 

選取 [需要] 核取方塊以啟用連線驗證。 

驗證方法 

應用程式伺服器可以使用三種方法來驗證資料庫連線:auto-commit、metadata 和 table。 

auto-commit 和 metadata - Application Server 透過呼叫 con.getAutoCommit() 方法和 con.getMetaData() 方法來驗證連線。但是,由於許多 JDBC 驅動程式快取了這些呼叫的結果,因此這兩種方法無法始終提供可靠的驗證。請與驅動程式供應商進行核實,以確定這些呼叫是否被快取。

table - 應用程式將查詢指定的資料庫表格。此表必須存在並且可以存取,但不要求表的列數。請勿使用包含許多列的現有表或經常存取的表。 

表格名稱 

如果從 [驗證方法] 組合方塊中選取了表,請在此處指定資料庫表格的名稱。 

一旦失敗 

選取標記為 [關閉所有連線] 的核取方塊之後,如果單一連線失敗,Application Server 將關閉池中的所有連線,然後重新建立這些連線。如果未選取此核取方塊,則僅在要使用個別連線時才會重新建立這些連線。 

由於許多使用者通常可以同步運作地存取一個資料庫,因此可能出現一個作業事件在更新資料而另一個作業事件嘗試讀取同一資料的情況。作業事件的隔絕層級定義了正在更新的資料對於其他作業事件的可視程度。如需有關隔絕層級的詳細資訊,請參閱資料庫供應商的文件。

參數

說明

作業事件隔絕 

使您可以為該池的連線選取作業事件隔絕層級。如果不指定此參數,連線將使用 JDBC 驅動程式提供的預設隔絕層級進行作業。 

受保證隔絕層級 

該項僅在指定了隔絕層級的情況下才適用。如果選取 [受保證] 核取方塊,則從池中獲取的所有連線都具有相同的隔絕層級。例如,如果上次使用連線時程式化 (使用 con.setTransactionIsolation) 變更了連線的隔離層級,這種機制會將狀態變更回指定的隔離層級。

JDBC 資源和連線池如何協同工作

為了儲存、組織和擷取資料,大多數應用程式均使用關聯式資料庫。Java EE 應用程式透過 JDBC API 存取關聯式資料庫。應用程式存取資料庫之前,必須先取得連線。

以下是在執行階段應用程式連線至資料庫時所發生的情況:

  1. 應用程式透過 JNDI API 進行呼叫以獲取與資料庫關聯的 JDBC 資源 (資料源)。

    如果給定了資源的 JNDI 名稱,命名和目錄服務將查找 JDBC 資源。每個 JDBC 資源指定一個連線池。

  2. 通過 JDBC 資源,應用程式獲得一個資料庫連線。

    應用程式伺服器秘密地從與該資料庫相對應的連線池中擷取實體連線。池定義資料庫名稱 (URL)、使用者名稱和密碼等連線屬性。

  3. 由於已將應用程式連線至資料庫,因此該應用程式可以讀取和修改資料庫中的資料以及將資料增加到資料庫中。

    應用程式透過對 JDBC API 進行呼叫來存取資料庫。JDBC 驅動程式可將應用程式的 JDBC 呼叫翻譯為資料庫伺服器的協定。

  4. 存取資料庫完成之後,應用程式將關閉該連線。

    應用程式伺服器將連線傳回連線池。連線傳回連線池之後,下一個應用程式便可以使用該連線。

設定資料庫存取

若要設定資料庫存取,您必須先安裝支援的資料庫產品。如需有關 Application Server 支援的資料庫產品的清單,請參閱版本說明。接著您必須安裝資料庫產品的 JDBC 驅動程式,讓網域的伺服器實例能夠存取驅動程式的 JAR 檔案。然後,建立資料庫、資料庫連線池以及指向連線池的 JDBC 資源。

安裝 JDBC 驅動程式之後,還必須加以整合,讓驅動程式將應用程式的 JDBC 呼叫轉譯為資料庫伺服器的協定。若要將 JDBC 驅動程式整合到管理網域中,請執行以下操作之一:

持續性管理程式資源

向下相容性需要此功能。若要在 Application Server 7 版本上執行,使用容器管 理的持續性 Bean (一種 EJB 元件) 的應用程式需要持續性管理員資源。建議改為使用 JDBC 資源。

若要使用 Admin Console 建立持續性管理程式資源,請選取 [資源] 節點。[持續性管理程式] 節點 > [持續性管理程式] 頁面。若要使用指令行公用程式,請使用 create-persistence-resource 指令。