本文描述了BEA WebLogic 8.1 Server中各種與JDBC相關(guān)功能的配置。盡管我們使用了Oracle 8.1.7作為我們的示例數(shù)據(jù)庫管理系統(tǒng)(DBMS),但是只要其他關(guān)系數(shù)據(jù)庫提供通過JDBC的連接,就可以很容易地把一般性的概念轉(zhuǎn)移到這些數(shù)據(jù)庫上。
JDBC是標(biāo)準(zhǔn)的Java API,幾乎所有需要訪問數(shù)據(jù)庫的J2EE應(yīng)用程序都直接或間接地使用了它。在BEA WebLogic 8.1中,配置JDBC連接包括創(chuàng)建和配置兩個主要的工件——JDBC連接池和數(shù)據(jù)源。與這兩個主要工件相關(guān)的是其他次要的可配置工件,比如多池或數(shù)據(jù)源工廠。
連接池還是多池?
在深入討論如何創(chuàng)建和配置連接池之前,我們需要簡要地看一看需要使用連接池的原因。
如果您沒有使用JDBC連接池訪問數(shù)據(jù)庫,那么為了建立到數(shù)據(jù)庫的連接,您將需要進行以下步驟:
- 加載JDBC驅(qū)動程序類。
- 創(chuàng)建JDBC驅(qū)動程序的一個實例,并把它注冊到驅(qū)動程序管理器中。
- 通過提供一個數(shù)據(jù)庫URL和其他所需的參數(shù),從驅(qū)動程序管理器中獲得一個到數(shù)據(jù)庫的連接。
- 完成之后關(guān)閉連接。
與這種一次一個連接的方法相比,連接池是數(shù)據(jù)庫連接的一個現(xiàn)存集合,而且可以在多個活動的J2EE應(yīng)用程序中回收這些數(shù)據(jù)庫連接。連接池中的連接是開放的,可用于訪問。應(yīng)用程序使用一個連接之后,這個連接沒有被銷毀,而是被返回到連接池中,隨后可以為其他應(yīng)用程序所用。通過節(jié)省與頻繁建立和斷開數(shù)據(jù)庫連接相關(guān)的計算資源,連接池提高了數(shù)據(jù)庫訪問的性能,尤其是在負(fù)載高峰期內(nèi)。
多池是連接池的集合。多池的主要目的是提高可用性和在一組連接池間實現(xiàn)負(fù)載均衡。
為什么使用數(shù)據(jù)源?
一個數(shù)據(jù)源就是一個提供對連接池或多池訪問的Java命名和目錄接口(Java Naming and Directory Interface,JNDI)對象。連接池或多池對于配置數(shù)據(jù)源是必需的。可以使用事務(wù)屬性來配置數(shù)據(jù)源。非事務(wù)性的數(shù)據(jù)源用于本地事務(wù);而事務(wù)性的數(shù)據(jù)源用于分布式事務(wù)。
數(shù)據(jù)源封裝了對數(shù)據(jù)庫的訪問,隱藏了訪問連接池或多池所涉及的細(xì)節(jié)。另外,數(shù)據(jù)源使配置數(shù)據(jù)庫連接的事務(wù)性特性變得容易。
JDBC Data Source Factory是一個JNDI對象,企業(yè)應(yīng)用程序使用它從應(yīng)用程序范圍內(nèi)的連接池中獲得連接。
JDBC驅(qū)動程序設(shè)置
在WebLogic Server和 DBMS之間建立連接所需的JDBC驅(qū)動程序分為兩種類型:Type 2和 Type 4。 Type 2 JDBC驅(qū)動程序需要本地庫。使用Type 2 JDBC驅(qū)動程序時,需要把到WebLogic共享庫(或動態(tài)鏈接庫)目錄的路徑
WebLogic 8.1 Server安裝在< WEBLOGIC >目錄中。Oracle 8.1.7數(shù)據(jù)庫安裝在< ORACLE >目錄中。< PATH >是WebLogic Server Path變量。
對于Type 2和 Type 4驅(qū)動程序來說,在WebLogic Server CLASSPATH中,需要相關(guān)的JDBC驅(qū)動程序類來配置連接池或數(shù)據(jù)源。把包含Oracle Type 2 JDBC驅(qū)動程序類的
:WebLogic Server Classpath變量。 :WebLogic Server Domain目錄。
配置JDBC連接池
現(xiàn)在,我們將考慮如何創(chuàng)建連接池和配置與其相關(guān)的各種參數(shù)。
要創(chuàng)建一個JDBC連接池,在Administration Console中右擊JDBC>Connection Pools節(jié)點,然后選擇Configure a new JDBC Connection Pool。
這將顯示一個Configure a JDBC Connection Pool畫面。為Oracle數(shù)據(jù)庫選擇Database Type – Oracle。選擇一個Database Driver,然后點擊Continue按鈕(參見圖1)。
隨后顯示Define Connection Properties畫面。在這個畫面中,指定一個Database Name、一個Database User Name和一個Password。點擊Continue按鈕。
隨后顯示Test DataBase Connection。在這個畫面中,指定Driver Classname、URL和Properties字段的值。Driver Classname就是用于獲得數(shù)據(jù)庫連接的驅(qū)動程序類名。URL是用于獲得連接的數(shù)據(jù)庫URL。Properties是用于創(chuàng)建連接的屬性列表。
表1中指定了用于不同Oracle JDBC驅(qū)動程序的Driver Classname和URL設(shè)置。
在URL設(shè)置中,< host >是在
在Properties文本框中的設(shè)置是:
user=
點擊Test Driver Configuration按鈕,以測試JDBC Connection Pool。如果驅(qū)動程序配置測試成功,會顯示一條“Connection successful”消息。如果驅(qū)動程序配置有錯誤,則會顯示一條錯誤消息。
隨后會顯示Create and Deploy畫面。在這個畫面中,選擇一臺服務(wù)器部署連接池,然后點擊Create and Deploy按鈕來創(chuàng)建和部署一個JDBC連接池。這將在被選中的服務(wù)器上創(chuàng)建和部署一個連接池。也可以把它部署在多臺服務(wù)器上。Administration Console中的JDBC>Connection Pools節(jié)點將會增加一個
要修改JDBC Connection Pool配置,點擊JDBC>Connection Pools>
連接屬性
- Initial Capacity:創(chuàng)建連接池時所創(chuàng)建的數(shù)據(jù)庫連接的數(shù)目。
- Maximum Capacity: 連接池中連接的最大數(shù)目。
- Capacity Increment: 連接池容量在最大容量限制范圍內(nèi)的增量。
- LoginDelay: 在創(chuàng)建每個物理數(shù)據(jù)庫連接之前要延遲的秒數(shù)。
- Allow Shrinking: 將該項設(shè)置為true時,如果沒有使用額外的連接,則允許連接池把容量減小到InitialCapacity。
- Shrink Frequency: 在減小連接池容量之前要等待的秒數(shù)。如果將Shrink Frequency設(shè)置為true,那么也必須將Allow Shrinking設(shè)置為true。
- Test Frequency: 數(shù)據(jù)庫連接測試之間間隔的秒數(shù)。在每個Refresh Period時間間隔之后,如果設(shè)置了TestTableName,就會使用TestTableName測試未使用的數(shù)據(jù)庫連接。
- Test Reserved Connections: 如果選擇了這個選項,服務(wù)器會在把連接提供給客戶端之前對其進行測試。
- Test Created Connections: 如果選擇了這個選項,就會在創(chuàng)建一個JDBC連接之后和在把它添加到JDBC連接池中的可用連接列表之前,對該JDBC連接進行測試。
- Test Released Connections: 如果選擇了這個選項,服務(wù)器就會在把連接返回給連接池之前對其進行測試。
- Test Table Name: 用于JDBC連接測試的數(shù)據(jù)庫表名。如果指定了Test Frequency,并且選擇了Test Reserved Connections、Test Created Connections或Test Released Connections,則Table Name是必需的。
在配置Connections畫面之后,選擇Apply按鈕。
配置JDBC多池
一個多池就是連接池的一個集合。在創(chuàng)建多池之前為多池配置連接池。要創(chuàng)建和配置一個新的多池,右擊Administration Console中的JDBC>Multi Pools節(jié)點,然后選擇Configure a New Multi Pool。
隨后會顯示Configuration畫面。在Multi Pool Configuration畫面中,指定Algorithm Type并選擇Create按鈕。如果將Algorithm Type設(shè)置為“High availability”,那么在使用另一個池中的連接之前,一個池中的所有可用連接應(yīng)已經(jīng)用完。如果將Algorithm Type設(shè)置為“Load balancing”,多池會將連接請求平均地分布給多池中的所有連接池(參見圖2)。
選擇Pools選項卡,然后在Pools畫面中選擇要添加到多池中的連接池。點擊Apply按鈕。被選中的連接池將被添加到多池中。連接中使用的連接池是基于Algorithm Type進行選擇的。
選擇Target and Deploy選項卡,然后在Target and Deploy畫面中選擇一臺目標(biāo)服務(wù)器。點擊Apply按鈕。可以把一個多池部署在多臺服務(wù)器上。Administration Console中的JDBC>Multi Pools節(jié)點將會增加一個
配置JDBC數(shù)據(jù)源
數(shù)據(jù)源是用于訪問連接池或多池的JNDI對象。連接池或多池對于創(chuàng)建數(shù)據(jù)源是必需的。連接池對于創(chuàng)建事務(wù)性的數(shù)據(jù)源是必需的。應(yīng)在創(chuàng)建數(shù)據(jù)源之前創(chuàng)建連接池或多池。
要創(chuàng)建和配置數(shù)據(jù)源,在Administration Console中右擊JDBC>Data Sources節(jié)點,然后選擇Configure a new JDBCTxData Source。
隨后會顯示Configuration畫面。在Data Source Configuration畫面中指定字段的設(shè)置。JNDI Name是數(shù)據(jù)源的JNDI路徑。
選擇Honor Global Transactions,以創(chuàng)建一個事務(wù)性的(Tx)數(shù)據(jù)源。如果沒有選中Honor Global Transactions,那么所創(chuàng)建的數(shù)據(jù)源就是非Tx數(shù)據(jù)源(參見圖3)。
隨后會顯示Connect to Connection Pool畫面。在Pool Name字段中,從可用連接池的列表中選擇一個JDBC連接池,然后點擊Continue按鈕。數(shù)據(jù)源與被選中的連接池相連接。
隨后會顯示Target the Data Source畫面。在這個畫面中,選擇一臺目標(biāo)服務(wù)器,然后點擊Continue按鈕。這將在被選中的服務(wù)器上部署數(shù)據(jù)源,但是也可以在多臺服務(wù)器上部署它。Administration Console中的JDBC>Data Sources節(jié)點將增加一個
數(shù)據(jù)源和Tx數(shù)據(jù)源之比較
如果在數(shù)據(jù)源配置中選擇了Honor Global Transactions,數(shù)據(jù)源就是Tx數(shù)據(jù)源。數(shù)據(jù)源是和連接池或多池一起使用的。Tx數(shù)據(jù)源和連接池一起使用。數(shù)據(jù)源用于本地事務(wù)。Tx數(shù)據(jù)源用于分布式事務(wù)。
在下列情況下,應(yīng)該使用Tx數(shù)據(jù)源而不是數(shù)據(jù)源:
- 使用容器托管的持久性實體bean。
- 在事務(wù)期間訪問多項資源。
- 在一個事務(wù)中進行多個數(shù)據(jù)庫更新。
- 在多臺服務(wù)器上使用同一個連接池。
配置JDBC數(shù)據(jù)源工廠
JDBC數(shù)據(jù)源工廠是一項JNDI數(shù)據(jù)源資源。企業(yè)應(yīng)用程序使用數(shù)據(jù)源工廠從應(yīng)用程序范圍內(nèi)的連接池中獲得連接。
要創(chuàng)建和配置一個JDBC數(shù)據(jù)源工廠,在Administration Console中右擊JDBC>Data Source Factories節(jié)點,然后選擇Configure a new JDBCDataSourceFactory。
隨后會顯示Configuration畫面。在這個畫面中,指定URL、Driver Class Name、 Factory Name和Properties字段的值,然后點擊Create按鈕(參見圖4)。
Administration Console中的JDBC>Data Source Factories節(jié)點將增加一個
JDBC配置和服務(wù)器性能
下面列出了BEA針對 WebLogic Server的各種JDBC配置設(shè)置給出的建議。
為了提高生產(chǎn)模式下服務(wù)器的性能:
- 在JDBC連接池配置中,把InitialCapacity的值設(shè)置為等于 MaxCapacity。如果InitialCapacity的值小于MaxCapacity,那么當(dāng)負(fù)載增加時,服務(wù)器就會創(chuàng)建額外的數(shù)據(jù)庫連接。在負(fù)載增加的情況下,必須分配資源以創(chuàng)建額外的數(shù)據(jù)庫連接,同時資源對于完成jdbc客戶端請求也是必需的。
- 把MaxCapacity的值設(shè)置為等于需要JDBC連接的并發(fā)客戶端會話的數(shù)量:為了確定一個連接池中的并發(fā)客戶端會話,選擇該連接池節(jié)點。選擇Monitoring選項卡。Active Connections欄中的值是并發(fā)客戶端會話的平均數(shù)目。Connections High的值是并發(fā)客戶端會話的最大數(shù)量。在部署應(yīng)用程序和監(jiān)視活動連接之后,可以修改MaxCapacity的值。
- 當(dāng)外部客戶端通過WebLogic Server使用JDBC訪問數(shù)據(jù)庫時,在數(shù)據(jù)源配置中選擇Row Prefetch Enabled:通過在一次服務(wù)器訪問中取多個行,行預(yù)取可以提高性能。
結(jié)束語
按照上面概述過程,WebLogic開發(fā)人員應(yīng)該能夠針對Oracle 8.1數(shù)據(jù)庫配置BEA WebLogic 8.1 Server了。配置其他數(shù)據(jù)庫類似于配置Oracle 8.1。把包含相應(yīng)數(shù)據(jù)庫的驅(qū)動程序類的zip/jar文件添加給CLASSPATH變量,然后在JDBC連接池配置中指定相應(yīng)的連接URL和驅(qū)動程序類名。