溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WAS 5.x中數(shù)據(jù)源的配置使用及其常見問題有哪些

發(fā)布時間:2021-07-06 09:25:50 來源:億速云 閱讀:140 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“WAS 5.x中數(shù)據(jù)源的配置使用及其常見問題有哪些”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1簡單原理和背景介紹

11 什么是數(shù)據(jù)源?為什么要使用數(shù)據(jù)源?

我們先來看一下使用JDBC1.0的時候,一般是怎樣來連接數(shù)據(jù)庫的。

代碼片斷示例1

java.sql.Connection con = null; try { Class.forName("COM.ibm.db2.jdbc.app.DB2Driver"); con = java.sql.DriverManager.getConnection("jdbc:db2:DBName"); } catch (Exception e) { System.err.println("Exception: " + e.getMessage()); }

由于建立一個數(shù)據(jù)庫連接是一種比較耗時的操作,在使用JDBC1.0的時候,如果要提高性能就需要應(yīng)用程序自己對連接進行緩存處理。但是在JDBC2.0 以一個附加的 API 的方式引入了標準連接池的特性,這個附加的 API 叫做 JDBC 2.0 可選包(也稱作 JDBC 2.0 標準擴展)。這樣對于支持JDBC2.0的數(shù)據(jù)庫(一般是指JDBC驅(qū)動程序支持),WebSphere應(yīng)用服務(wù)器提供了連接池的支持。JDBC2.0 API 為連接池提供了一個客戶端和一個服務(wù)器端的接口??蛻舳私涌谑?span lang="EN-US"> javax.sql.DataSource,通常就是應(yīng)用代碼用來請求一個緩沖了的數(shù)據(jù)庫連接的東西。這個數(shù)據(jù)源就是生成數(shù)據(jù)庫連接對象的工廠。服務(wù)器接口是 javax.sql.ConnectionPoolDataSource,通常是大多數(shù)應(yīng)用服務(wù)器和數(shù)據(jù)庫JDBC驅(qū)動打交道的接口。

連接池可改進任何需要連接的應(yīng)用程序(特別是基于 Web 的應(yīng)用程序,Web 用戶的連接和斷開更為頻繁)的響應(yīng)時間。因為連接池的實現(xiàn),在客戶端調(diào)用 close()方法的時候?qū)嶋H上并不關(guān)閉連接,而是把連接返回到一個可重用連接的連接池中給其它客戶端使用。這樣就避免了任何重復(fù)打開和關(guān)閉數(shù)據(jù)庫連接造成的開銷,并且允許大量的客戶端分享相對較少的數(shù)據(jù)庫連接,從而提高數(shù)據(jù)庫操作的性能。為了使用應(yīng)用服務(wù)器提供的連接池功能,我們需要先定義相應(yīng)的數(shù)據(jù)源。數(shù)據(jù)源在WebSphere應(yīng)用服務(wù)器中作為資源存在,因此可以統(tǒng)一通過JNDI來查詢它們。

使用數(shù)據(jù)源的代碼片斷示例2

try{ javax.naming.InitialContext ctx = new javax.naming.InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/DSName"); java.sql.Connection con = ds.getConnection(); }catch(javax.naming.NamingException e1){ System.err.println("Naming-Exception: " + e1.getMessage()); }catch (java.sql.SQLException e2) { System.err.println("Naming-Exception: " + e2.getMessage()); }

//裝載JDBC驅(qū)動程序 java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //設(shè)置數(shù)據(jù)庫連接字符串 java.lang.String strConn = "jdbc:oracle:thin:@hostname/IP:1521:SIDName"; //連接數(shù)據(jù)庫 java.sql.Connection sqlConn = java.sql.DriverManager.getConnection(strConn,"userName","passWord");

這種方式需要把數(shù)據(jù)庫的用戶名和口令放在程序的源代碼中。而在WebSphere應(yīng)用服務(wù)器中我們可以在定義數(shù)據(jù)源的時候通過J2C認證的方式配置數(shù)據(jù)庫訪問別名,從而提升安全性。另外,這種方法也更靈活,如果數(shù)據(jù)庫用戶名或口令發(fā)生變化不需要更改應(yīng)用程序代碼。

12 WebSphere應(yīng)用服務(wù)器中數(shù)據(jù)源所處的位置

很多人在剛開始配置WebSphere應(yīng)用服務(wù)器數(shù)據(jù)源時對J2C認證別名很不習慣,覺得JDBC的東西怎么會與J2C扯上關(guān)系。我們知道基于J2EEWEB應(yīng)用在與后臺EIS(企業(yè)信息系統(tǒng))集成的過程中,根據(jù)EIS的不同主要有三種連接方式,分別是JDBC,JCA/J2CJMS。從理論上講,JDBC驅(qū)動程序是可能歸納成一種特殊的JCA連接器,只不過這個連接器后面恰好連接著關(guān)系型數(shù)據(jù)庫。至于實際標準如何發(fā)展,讓我們拭目以待。下面我們看一下WebSphere應(yīng)用服務(wù)器中數(shù)據(jù)庫連接及持久性管理的示意圖。

2.如何在WebSphere應(yīng)用服務(wù)器中配置數(shù)據(jù)源我們首先概要的看一下在WebSphere應(yīng)用服務(wù)器中配置和使用數(shù)據(jù)源所涉及的幾個環(huán)節(jié)。一般的,配置數(shù)據(jù)源的基本步驟如下:

  1. 首先要確認所用的數(shù)據(jù)庫是支持JDBC2.0的,并確保我們的操作系統(tǒng)環(huán)境設(shè)置為支持 JDBC 2.0。這是使用 WebSphere應(yīng)用服務(wù)器創(chuàng)建的數(shù)據(jù)源所必需的。這一點在使用UDB DB2 7.2的時候尤其要注意。

  2. 要確定使用哪個數(shù)據(jù)源:數(shù)據(jù)源V4.0還是 V5.0 數(shù)據(jù)源。數(shù)據(jù)源V4.0是使用 WebSphere 舊連接管理器體系結(jié)構(gòu)的 WebSphere 4.x 中的數(shù)據(jù)源,所有的 EJB1.x 模塊都必須使用此數(shù)據(jù)源。 WebSphere應(yīng)用服務(wù)器5.x提供對 V4.0 JDBC 連接管理器模型的支持,使得 J2EE 1.2 應(yīng)用程序能夠不經(jīng)改變地運行。WAS 5.x 也支持J2EE 1.3的應(yīng)用, J2EE 1.3 應(yīng)用程序內(nèi)的 EJB 2.0 模塊,WEB 2.3模塊需要使用 V5.0JDBC 連接管理器。

  3. 創(chuàng)建 JDBC 提供程序。JDBC提供程序指的是JDBC驅(qū)動程序的類型及其相應(yīng)的驅(qū)動程序?qū)崿F(xiàn)JAVA包。

  4. 創(chuàng)建數(shù)據(jù)源。數(shù)據(jù)源是在提供特定 JDBC 驅(qū)動程序?qū)崿F(xiàn)類的 JDBC 提供程序下創(chuàng)建的。

  5. 綁定資源引用。J2EE 1.3標準推薦使用數(shù)據(jù)源的引用而不是直接使用數(shù)據(jù)源的名稱。

  6. 測試連接。WebSphere應(yīng)用服務(wù)器5.0.x5.1提供了數(shù)據(jù)源配置頁面上提供了測試數(shù)據(jù)源連接的測試按鈕。

接下來,我們對數(shù)據(jù)源配置中的最為重要的兩步,即創(chuàng)建 JDBC提供程序時的配置步驟和創(chuàng)建數(shù)據(jù)源時的配置過程進行詳細描述。 21 配置JDBC提供程序如果是第一次配置數(shù)據(jù)源連接,需要配置JDBC提供程序。配置JDBC提供程序的步驟如下:登錄WAS管理控制臺頁面,單擊資源 -> JDBC 提供程序 -> 選擇相應(yīng)的作用域 -> 新建 -> 選擇相應(yīng)的JDBC提供程序類型。 211 選擇JDBC提供程序的作用域指定JDBC提供程序的作用域,如下圖所示。

的設(shè)置取決于實際WebSphere應(yīng)用服務(wù)器的拓撲結(jié)構(gòu)。一般有以下三種作用域:

  1. 單元

最常規(guī)的作用域。在單元作用域上定義的資源對于所有節(jié)點和服務(wù)器都是可見的,除非它們被覆蓋了。要查看單元作用域中定義的資源,不要在作用域選擇表單中指定服務(wù)器或節(jié)點名。

  1. 節(jié)點

多數(shù)資源類型的缺省作用域。在節(jié)點作用域上定義的資源覆蓋任何在單元作用域上定義的重復(fù)項,并且對于相同節(jié)點上的所有服務(wù)器都是可見的,除非它們在該節(jié)點上的服務(wù)器作用域中被覆蓋了。要查看節(jié)點作用域中定義的資源,不要指定服務(wù)器,但是要在作用域選擇表單中選擇節(jié)點名。

  1. 服務(wù)器

定義資源的最特定作用域。在服務(wù)器作用域上定義的資源覆蓋任何在單元作用域或父節(jié)點作用域上定義的重復(fù)資源定義,并且它們僅對于特定服務(wù)器是可見的。要查看服務(wù)器作用域中定義的資源,在作用域選擇表單中指定服務(wù)器名和節(jié)點名。

以看出上面三個作用域的范圍逐漸遞減,并且同名的資源以最小范圍的為準。這個有點類似編程語言中變量的作用域。根據(jù)上面作用域的范圍的描述,在單節(jié)點的情況下,一般選用節(jié)點。如果只有一個應(yīng)用服務(wù)器實例也可以選擇服務(wù)器。在多個節(jié)點構(gòu)成的單元中,可以分別在每個節(jié)點上分別定義,也可以選擇單元作用域一次性定義。

212 選擇JDBC提供程序

使用下拉列表選擇要創(chuàng)建的 JDBC 提供程序類型,如下圖所示。

如果支持的 JDBC 提供程序類型列表不包含我們要使用的 JDBC 提供程序,則選擇用戶定義的 JDBC 提供程序(User-defined JDBC Provider)。如果數(shù)據(jù)源需要兩階段提交(2PC)的支持,那么在選擇JDBC驅(qū)動程序時需要選擇帶XA支持的驅(qū)動程序。請查詢 JDBC 提供程序供應(yīng)商文檔以獲取特定的必需屬性信息。 213 JDBC提供程序的屬性 JDBC提供程序的常規(guī)屬性頁如下圖所示:

這個頁面中最為重要的設(shè)置是類路徑。它是指定共同組成資源提供程序類的位置路徑或 JAR 文件名的列表,也即JDBC驅(qū)動程序類包。大部分常見數(shù)據(jù)庫的JDBC驅(qū)動程序都以jar文件或zip文件的形式提供。例如 DB2 7.2JDBC驅(qū)動程序文件名為db2java.zipOracle 8.1.7JDBC驅(qū)動程序文件名為classes12.zip,Sybase 12JDBC驅(qū)動程序文件名為jconn2.jar等。在WebSphere應(yīng)用服務(wù)器5.1中,類路徑的缺省值反映了相應(yīng)數(shù)據(jù)庫更新的JDBC驅(qū)動程序,例如Oracle 9iojdbc14.jar。類路徑缺省值中還帶有一個相應(yīng)的WebSphere變量,我們可以用絕對路徑替換或定義此WebSphere變量的值。

實現(xiàn)類名指定 JDBC 驅(qū)動程序?qū)崿F(xiàn)的 Java 類名。此類可用于上面的類路徑描述中提到的驅(qū)動程序文件,例如 COM.ibm.db2.jdbc.DB2XADataSource。一般不需要手工填入,采用缺省值即可。但是如果前面JDBC提供程序類型選了User-defined JDBC Provider的話就需要自己修改這個值。

修改完這些屬性之后按確定并保存就完成了JDBC提供程序的配置。這樣我們就可以在JDBC提供程序的列表中找到我們定義的JDBC提供程序(注意選擇正確的作用域并點擊應(yīng)用按鈕)。

22 配置數(shù)據(jù)源

創(chuàng)建 JDBC 提供程序后,我們就可以創(chuàng)建數(shù)據(jù)源以訪問后端數(shù)據(jù)存儲。創(chuàng)建新的 V 5.0 數(shù)據(jù)源的步驟基本如下:

  1. 打開WAS5.x管理控制臺。

  2. 單擊資源 -> JDBC 提供程序。

  3. 選擇相應(yīng)的作用域選項以找要為其創(chuàng)建數(shù)據(jù)源的 JDBC 提供程序。

  4. 選擇我們要創(chuàng)建數(shù)據(jù)源的 JDBC 資源提供程序,會出現(xiàn)此提供程序的詳細信息頁面。

  5. 如果我們要創(chuàng)建 V5.0 數(shù)據(jù)源,則單擊其它特性中的數(shù)據(jù)源。

  6. 單擊新建以顯示數(shù)據(jù)源的配置頁面,如下圖所示。

這個頁面中的幾個重要的設(shè)置如下。名稱:指定當前數(shù)據(jù)源的顯示名稱。 JNDI名:指定當前數(shù)據(jù)源的JNDI名稱。其缺省值為“jdbc/顯示名稱容器受管持久性:指定此數(shù)據(jù)源是否用于企業(yè) bean 的容器管理的持久性。如果選擇此復(fù)選框,則為關(guān)系資源適配器創(chuàng)建與此數(shù)據(jù)源相應(yīng)的 CMP 連接器工廠。一般的,如果應(yīng)用程序中有CMP,則需要選上此項。CMP容器生成的JNDI名稱為eis/數(shù)據(jù)源名稱_CMP,這個值在發(fā)布含有CMP的應(yīng)用時綁定使用。語句高速緩存大小:每個連接的空閑已準備語句(PreparedStatement)數(shù),也即已準備語句緩存的數(shù)目,用以提供性能。如果我們將此數(shù)設(shè)置得過高,我們會缺乏資源,因為系統(tǒng)無法打開那么多已準備語句。一般采用缺省值即可。組件受管認證別名:此別名用于運行時的數(shù)據(jù)庫認證。如果我們的應(yīng)用程序資源認證(res-auth)設(shè)置為應(yīng)用程序,則在組件管理的認證別名中設(shè)置別名。容器受管的認證別名:此別名用于運行時的數(shù)據(jù)庫認證。如果我們的應(yīng)用程序資源認證(res-auth)設(shè)置為容器,則設(shè)置容器管理的認證別名。 WAS5的數(shù)據(jù)源用J2C的安全認證方式,故一般不需要在應(yīng)用級別設(shè)置用戶名和口令,而必須定義一個J2C的認證別名。如果我們的數(shù)據(jù)庫(例如 Cloudscape)不支持用戶標識和密碼,則不要在組件管理的認證別名容器管理的認證別名字段中設(shè)置別名。如果沒有事先定義好J2C認證別名(通過管理控制臺的安全性 -> JAAS配置 -> J2C認證數(shù)據(jù)),上面的兩個下拉列表中是沒有相應(yīng)的J2C認證別名的??梢酝ㄟ^點擊應(yīng)用按鈕,在數(shù)據(jù)源屬性頁面的最下面出現(xiàn)相關(guān)項,如下圖所示。

再點擊J2C認證數(shù)據(jù)條目鏈接,然后點擊新建按鈕就可以進入到定義它的頁面,如下圖所示。

上述頁面中的別名就是標識這個J2C認證數(shù)據(jù)條目的,也即出現(xiàn)在數(shù)據(jù)源定義頁中容器受管的認證別名和組建受管認證別名列表中的名字。用戶名和密碼對應(yīng)目標數(shù)據(jù)庫的用戶名和密碼。點擊確定并保存。

·  現(xiàn)在通過點擊相應(yīng)JDBC提供程序的數(shù)據(jù)源鏈接,可以看到前面定義的數(shù)據(jù)源。進入數(shù)據(jù)源的配置頁面,在相應(yīng)的認證別名的列表中選擇剛才定義的認證別名。

·  選擇其它屬性欄目中的定制屬性進入數(shù)據(jù)源的定制屬性頁。這個頁面中要定義的屬性與所選數(shù)據(jù)庫類型有關(guān)。一般的,對于DB2數(shù)據(jù)庫,必須的屬性是databaseName,即所對應(yīng)數(shù)據(jù)庫名字。對于Oracle數(shù)據(jù)庫,必須的屬性是URL,如jdbc:oracle:thin:@localhost:1521:sample。修改完定制屬性之后,點擊確定并保存修改。

·  我們已定義和保存數(shù)據(jù)源之后,可以單擊測試連接按鈕以確保此數(shù)據(jù)源定義中的參數(shù)是正確的。在數(shù)據(jù)源列表頁上,我們可以同時選擇多個數(shù)據(jù)源并測試它們。一般配置完數(shù)據(jù)源之后不需要重新啟動服務(wù)器,就可以測試成功。但是注意如果我們添加新的 WebSphere 環(huán)境變量或修改它,必須重新啟動進程(網(wǎng)絡(luò)部署環(huán)境下還要重啟Node Agent Deployment Manager)使這些變量生效。

·  至此,數(shù)據(jù)源的基本配置就完成了。但是在很多情況下我們還要對連接池的屬性進行調(diào)整。通過點擊數(shù)據(jù)源配置頁面中其它屬性的連接池鏈接,可以得到連接池的配置頁面,如下圖所示。

這個配置頁面的幾個重要屬性說明如下:

連接超時:這個值指定當連接池達到給定連接池的最大值(最大連接數(shù))時所等待的時間。當超過這個時間還是沒有空閑連接時,連接請求超時并拋出 ConnectionWaitTimeoutException。如果連接超時設(shè)置為 0,則只要必需,池管理器就會等待直到分配一個連接為止(這在連接數(shù)下降到最大連接數(shù)值以下時發(fā)生)。

最大連接數(shù)和最小連接數(shù):這兩個參數(shù)分別指定可以在此池中創(chuàng)建的最大物理連接數(shù)和最小物理連接數(shù)。應(yīng)用服務(wù)器啟動的時候,連接池并不建立連接。只有當應(yīng)用程序請求數(shù)據(jù)庫連接時,連接池才開始建立連接。當連接池中的連接數(shù)達到最小連接數(shù)之后,此后根據(jù)實際應(yīng)用程序?qū)?shù)據(jù)庫連接的需求,連接池中的連接數(shù)就保持在最小連接數(shù)和最大連接數(shù)之間??梢愿鶕?jù)應(yīng)用程序?qū)?shù)據(jù)庫連接的要求調(diào)整這兩個參數(shù)。

不使用超時:這個參數(shù)指定一個空閑連接在連接池中能夠存活的最大時間。因為在連接池中保持連接會消耗系統(tǒng)資源,因此超過最小連接數(shù)的空閑連接會被定時清除。不使用超時設(shè)為0時就不清除空閑連接。

獲得時間:連接池中的連接由一個定時運行的線程進行維護。這個參數(shù)就是指定運行連接池維護線程之間的間隔。例如,如果獲得時間設(shè)置為 60,則池維護線程每 60 秒運行一次。當池維護線程運行時,它廢棄所有未使用的連接(未使用時間長于不使用超時中指定的時間值),直到它到達最小連接數(shù)中指定的連接數(shù)。池維護線程還廢棄所有活動時間長于時效超時中指定的時間值的連接。獲得時間間隔還影響性能,因為更短的間隔意味著池維護線程將更頻繁的運行并降低性能。要禁用池維持線程,獲得時間設(shè)置為 0,或不使用超時時效超時都設(shè)置為 0。

時效超時:這個參數(shù)指應(yīng)用在獲得連接之后而不使用它的最大空閑時間。超過大概兩倍時效超時,這個空閑連接將被強行放回到連接池(注:這個工作也是由連接池維護線程來做的,因為整個過程要等待兩個時效超時,因此總超時時間大概是時效超時的兩倍)。如果在放回到連接池之后,應(yīng)用再去使用這個連接就會報StaleConnectionException異常。這個參數(shù)對事務(wù)處理中的連接不生效。時效超時設(shè)為0時這個參數(shù)就不生效。這里有一點要注意,雖然WebSphere應(yīng)用服務(wù)器可以通過設(shè)置這個參數(shù)可以回收應(yīng)用程序中忘記釋放的數(shù)據(jù)庫連接,但是在大并發(fā)量用戶訪問的時候還是會導(dǎo)致數(shù)據(jù)庫連接不夠用的異常。因此,盡量保證應(yīng)用程序中使用完數(shù)據(jù)庫連接之后及時放回到連接池中去。

上面三個參數(shù)之間是有一定聯(lián)系的。不使用超時和時效超時都是由連接池維護線程來進行維護和判斷的,因此真正的超時生效時間有時要比設(shè)定的大,理論上最大值為不使用超時或時效超時再加上獲得時間。另外,應(yīng)該將獲得時間值設(shè)置為小于不使用超時時效超時的值,否則后兩個參數(shù)的意義就打折扣了。

“WAS 5.x中數(shù)據(jù)源的配置使用及其常見問題有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

was
AI