您好,登錄后才能下訂單哦!
本篇內容介紹了“WAS 5.x中數據源的配置使用及其常見問題有哪些”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1.簡單原理和背景介紹
1.1 什么是數據源?為什么要使用數據源?
我們先來看一下使用JDBC1.0的時候,一般是怎樣來連接數據庫的。
代碼片斷示例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()); } |
由于建立一個數據庫連接是一種比較耗時的操作,在使用JDBC1.0的時候,如果要提高性能就需要應用程序自己對連接進行緩存處理。但是在JDBC2.0 以一個附加的 API 的方式引入了標準連接池的特性,這個附加的 API 叫做 JDBC 2.0 可選包(也稱作 JDBC 2.0 標準擴展)。這樣對于支持JDBC2.0的數據庫(一般是指JDBC驅動程序支持),WebSphere應用服務器提供了連接池的支持。JDBC2.0 API 為連接池提供了一個客戶端和一個服務器端的接口。客戶端接口是 javax.sql.DataSource,通常就是應用代碼用來請求一個緩沖了的數據庫連接的東西。這個數據源就是生成數據庫連接對象的工廠。服務器接口是 javax.sql.ConnectionPoolDataSource,通常是大多數應用服務器和數據庫JDBC驅動打交道的接口。
連接池可改進任何需要連接的應用程序(特別是基于 Web 的應用程序,Web 用戶的連接和斷開更為頻繁)的響應時間。因為連接池的實現,在客戶端調用 close()方法的時候實際上并不關閉連接,而是把連接返回到一個可重用連接的連接池中給其它客戶端使用。這樣就避免了任何重復打開和關閉數據庫連接造成的開銷,并且允許大量的客戶端分享相對較少的數據庫連接,從而提高數據庫操作的性能。為了使用應用服務器提供的連接池功能,我們需要先定義相應的數據源。數據源在WebSphere應用服務器中作為資源存在,因此可以統一通過JNDI來查詢它們。
使用數據源的代碼片斷示例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驅動程序 java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); //設置數據庫連接字符串 java.lang.String strConn = "jdbc:oracle:thin:@hostname/IP:1521:SIDName"; //連接數據庫 java.sql.Connection sqlConn = java.sql.DriverManager.getConnection(strConn,"userName","passWord"); |
這種方式需要把數據庫的用戶名和口令放在程序的源代碼中。而在WebSphere應用服務器中我們可以在定義數據源的時候通過J2C認證的方式配置數據庫訪問別名,從而提升安全性。另外,這種方法也更靈活,如果數據庫用戶名或口令發生變化不需要更改應用程序代碼。
1.2 WebSphere應用服務器中數據源所處的位置
很多人在剛開始配置WebSphere應用服務器數據源時對J2C認證別名很不習慣,覺得JDBC的東西怎么會與J2C扯上關系。我們知道基于J2EE的WEB應用在與后臺EIS(企業信息系統)集成的過程中,根據EIS的不同主要有三種連接方式,分別是JDBC,JCA/J2C和JMS。從理論上講,JDBC驅動程序是可能歸納成一種特殊的JCA連接器,只不過這個連接器后面恰好連接著關系型數據庫。至于實際標準如何發展,讓我們拭目以待。下面我們看一下WebSphere應用服務器中數據庫連接及持久性管理的示意圖。
2.如何在WebSphere應用服務器中配置數據源我們首先概要的看一下在WebSphere應用服務器中配置和使用數據源所涉及的幾個環節。一般的,配置數據源的基本步驟如下:
首先要確認所用的數據庫是支持JDBC2.0的,并確保我們的操作系統環境設置為支持 JDBC 2.0。這是使用 WebSphere應用服務器創建的數據源所必需的。這一點在使用UDB DB2 7.2的時候尤其要注意。
要確定使用哪個數據源:數據源V4.0還是 V5.0 數據源。數據源V4.0是使用 WebSphere 舊連接管理器體系結構的 WebSphere 4.x 中的數據源,所有的 EJB1.x 模塊都必須使用此數據源。 WebSphere應用服務器5.x提供對 V4.0 的 JDBC 連接管理器模型的支持,使得 J2EE 1.2 應用程序能夠不經改變地運行。WAS 5.x 也支持J2EE 1.3的應用, J2EE 1.3 應用程序內的 EJB 2.0 模塊,WEB 2.3模塊需要使用 V5.0的JDBC 連接管理器。
創建 JDBC 提供程序。JDBC提供程序指的是JDBC驅動程序的類型及其相應的驅動程序實現JAVA包。
創建數據源。數據源是在提供特定 JDBC 驅動程序實現類的 JDBC 提供程序下創建的。
綁定資源引用。J2EE 1.3標準推薦使用數據源的引用而不是直接使用數據源的名稱。
測試連接。WebSphere應用服務器5.0.x及5.1提供了數據源配置頁面上提供了測試數據源連接的測試按鈕。
接下來,我們對數據源配置中的最為重要的兩步,即創建 JDBC提供程序時的配置步驟和創建數據源時的配置過程進行詳細描述。 2.1 配置JDBC提供程序如果是第一次配置數據源連接,需要配置JDBC提供程序。配置JDBC提供程序的步驟如下:登錄WAS管理控制臺頁面,單擊資源 -> JDBC 提供程序 -> 選擇相應的作用域 -> 新建 -> 選擇相應的JDBC提供程序類型。 2.1.1 選擇JDBC提供程序的作用域指定JDBC提供程序的作用域,如下圖所示。
的設置取決于實際WebSphere應用服務器的拓撲結構。一般有以下三種作用域:
單元
最常規的作用域。在“單元”作用域上定義的資源對于所有節點和服務器都是可見的,除非它們被覆蓋了。要查看單元作用域中定義的資源,不要在作用域選擇表單中指定服務器或節點名。
節點
多數資源類型的缺省作用域。在“節點”作用域上定義的資源覆蓋任何在“單元”作用域上定義的重復項,并且對于相同節點上的所有服務器都是可見的,除非它們在該節點上的服務器作用域中被覆蓋了。要查看節點作用域中定義的資源,不要指定服務器,但是要在作用域選擇表單中選擇節點名。
服務器
定義資源的最特定作用域。在“服務器”作用域上定義的資源覆蓋任何在“單元”作用域或父“節點”作用域上定義的重復資源定義,并且它們僅對于特定服務器是可見的。要查看服務器作用域中定義的資源,在作用域選擇表單中指定服務器名和節點名。
以看出上面三個作用域的范圍逐漸遞減,并且同名的資源以最小范圍的為準。這個有點類似編程語言中變量的作用域。根據上面作用域的范圍的描述,在單節點的情況下,一般選用“節點”。如果只有一個應用服務器實例也可以選擇“服務器”。在多個節點構成的單元中,可以分別在每個節點上分別定義,也可以選擇“單元”作用域一次性定義。
2.1.2 選擇JDBC提供程序
使用下拉列表選擇要創建的 JDBC 提供程序類型,如下圖所示。
如果支持的 JDBC 提供程序類型列表不包含我們要使用的 JDBC 提供程序,則選擇用戶定義的 JDBC 提供程序(User-defined JDBC Provider)。如果數據源需要兩階段提交(2PC)的支持,那么在選擇JDBC驅動程序時需要選擇帶XA支持的驅動程序。請查詢 JDBC 提供程序供應商文檔以獲取特定的必需屬性信息。 2.1.3 JDBC提供程序的屬性 JDBC提供程序的常規屬性頁如下圖所示:
這個頁面中最為重要的設置是類路徑。它是指定共同組成資源提供程序類的位置路徑或 JAR 文件名的列表,也即JDBC驅動程序類包。大部分常見數據庫的JDBC驅動程序都以jar文件或zip文件的形式提供。例如 DB2 7.2的JDBC驅動程序文件名為db2java.zip,Oracle 8.1.7的JDBC驅動程序文件名為classes12.zip,Sybase 12的JDBC驅動程序文件名為jconn2.jar等。在WebSphere應用服務器5.1中,類路徑的缺省值反映了相應數據庫更新的JDBC驅動程序,例如Oracle 9i的ojdbc14.jar。類路徑缺省值中還帶有一個相應的WebSphere變量,我們可以用絕對路徑替換或定義此WebSphere變量的值。
實現類名指定 JDBC 驅動程序實現的 Java 類名。此類可用于上面的“類路徑”描述中提到的驅動程序文件,例如 COM.ibm.db2.jdbc.DB2XADataSource。一般不需要手工填入,采用缺省值即可。但是如果前面JDBC提供程序類型選了User-defined JDBC Provider的話就需要自己修改這個值。
修改完這些屬性之后按確定并保存就完成了JDBC提供程序的配置。這樣我們就可以在JDBC提供程序的列表中找到我們定義的JDBC提供程序(注意選擇正確的作用域并點擊應用按鈕)。
2.2 配置數據源
創建 JDBC 提供程序后,我們就可以創建數據源以訪問后端數據存儲。創建新的 V 5.0 數據源的步驟基本如下:
打開WAS5.x管理控制臺。
單擊資源 -> JDBC 提供程序。
選擇相應的作用域選項以找要為其創建數據源的 JDBC 提供程序。
選擇我們要創建數據源的 JDBC 資源提供程序,會出現此提供程序的詳細信息頁面。
如果我們要創建 V5.0 數據源,則單擊“其它特性”中的數據源。
單擊新建以顯示數據源的配置頁面,如下圖所示。
這個頁面中的幾個重要的設置如下。名稱:指定當前數據源的顯示名稱。 JNDI名:指定當前數據源的JNDI名稱。其缺省值為“jdbc/顯示名稱”。容器受管持久性:指定此數據源是否用于企業 bean 的容器管理的持久性。如果選擇此復選框,則為關系資源適配器創建與此數據源相應的 CMP 連接器工廠。一般的,如果應用程序中有CMP,則需要選上此項。CMP容器生成的JNDI名稱為eis/數據源名稱_CMP,這個值在發布含有CMP的應用時綁定使用。語句高速緩存大小:每個連接的空閑已準備語句(PreparedStatement)數,也即已準備語句緩存的數目,用以提供性能。如果我們將此數設置得過高,我們會缺乏資源,因為系統無法打開那么多已準備語句。一般采用缺省值即可。組件受管認證別名:此別名用于運行時的數據庫認證。如果我們的應用程序資源認證(res-auth)設置為應用程序,則在“組件管理的認證別名”中設置別名。容器受管的認證別名:此別名用于運行時的數據庫認證。如果我們的應用程序資源認證(res-auth)設置為容器,則設置“容器管理的認證別名”。 WAS5的數據源用J2C的安全認證方式,故一般不需要在應用級別設置用戶名和口令,而必須定義一個J2C的認證別名。如果我們的數據庫(例如 Cloudscape)不支持用戶標識和密碼,則不要在“組件管理的認證別名”或“容器管理的認證別名”字段中設置別名。如果沒有事先定義好J2C認證別名(通過管理控制臺的安全性 -> JAAS配置 -> J2C認證數據),上面的兩個下拉列表中是沒有相應的J2C認證別名的。可以通過點擊應用按鈕,在數據源屬性頁面的最下面出現“相關項”,如下圖所示。
再點擊J2C認證數據條目鏈接,然后點擊新建按鈕就可以進入到定義它的頁面,如下圖所示。
上述頁面中的別名就是標識這個J2C認證數據條目的,也即出現在數據源定義頁中容器受管的認證別名和組建受管認證別名列表中的名字。用戶名和密碼對應目標數據庫的用戶名和密碼。點擊確定并保存。
· 現在通過點擊相應JDBC提供程序的數據源鏈接,可以看到前面定義的數據源。進入數據源的配置頁面,在相應的認證別名的列表中選擇剛才定義的認證別名。
· 選擇其它屬性欄目中的定制屬性進入數據源的定制屬性頁。這個頁面中要定義的屬性與所選數據庫類型有關。一般的,對于DB2數據庫,必須的屬性是databaseName,即所對應數據庫名字。對于Oracle數據庫,必須的屬性是URL,如jdbc:oracle:thin:@localhost:1521:sample。修改完定制屬性之后,點擊確定并保存修改。
· 我們已定義和保存數據源之后,可以單擊測試連接按鈕以確保此數據源定義中的參數是正確的。在數據源列表頁上,我們可以同時選擇多個數據源并測試它們。一般配置完數據源之后不需要重新啟動服務器,就可以測試成功。但是注意如果我們添加新的 WebSphere 環境變量或修改它,必須重新啟動進程(網絡部署環境下還要重啟Node Agent 和 Deployment Manager)使這些變量生效。
· 至此,數據源的基本配置就完成了。但是在很多情況下我們還要對連接池的屬性進行調整。通過點擊數據源配置頁面中其它屬性的連接池鏈接,可以得到連接池的配置頁面,如下圖所示。
這個配置頁面的幾個重要屬性說明如下:
連接超時:這個值指定當連接池達到給定連接池的最大值(最大連接數)時所等待的時間。當超過這個時間還是沒有空閑連接時,連接請求超時并拋出 ConnectionWaitTimeoutException。如果連接超時設置為 0,則只要必需,池管理器就會等待直到分配一個連接為止(這在連接數下降到最大連接數值以下時發生)。
最大連接數和最小連接數:這兩個參數分別指定可以在此池中創建的最大物理連接數和最小物理連接數。應用服務器啟動的時候,連接池并不建立連接。只有當應用程序請求數據庫連接時,連接池才開始建立連接。當連接池中的連接數達到最小連接數之后,此后根據實際應用程序對數據庫連接的需求,連接池中的連接數就保持在最小連接數和最大連接數之間。可以根據應用程序對數據庫連接的要求調整這兩個參數。
不使用超時:這個參數指定一個空閑連接在連接池中能夠存活的最大時間。因為在連接池中保持連接會消耗系統資源,因此超過最小連接數的空閑連接會被定時清除。不使用超時設為0時就不清除空閑連接。
獲得時間:連接池中的連接由一個定時運行的線程進行維護。這個參數就是指定運行連接池維護線程之間的間隔。例如,如果“獲得時間”設置為 60,則池維護線程每 60 秒運行一次。當池維護線程運行時,它廢棄所有未使用的連接(未使用時間長于“不使用超時”中指定的時間值),直到它到達最小連接數中指定的連接數。池維護線程還廢棄所有活動時間長于“時效超時”中指定的時間值的連接。獲得時間間隔還影響性能,因為更短的間隔意味著池維護線程將更頻繁的運行并降低性能。要禁用池維持線程,“獲得時間”設置為 0,或“不使用超時”和“時效超時”都設置為 0。
時效超時:這個參數指應用在獲得連接之后而不使用它的最大空閑時間。超過大概兩倍時效超時,這個空閑連接將被強行放回到連接池(注:這個工作也是由連接池維護線程來做的,因為整個過程要等待兩個時效超時,因此總超時時間大概是時效超時的兩倍)。如果在放回到連接池之后,應用再去使用這個連接就會報StaleConnectionException異常。這個參數對事務處理中的連接不生效。時效超時設為0時這個參數就不生效。這里有一點要注意,雖然WebSphere應用服務器可以通過設置這個參數可以回收應用程序中忘記釋放的數據庫連接,但是在大并發量用戶訪問的時候還是會導致數據庫連接不夠用的異常。因此,盡量保證應用程序中使用完數據庫連接之后及時放回到連接池中去。
上面三個參數之間是有一定聯系的。不使用超時和時效超時都是由連接池維護線程來進行維護和判斷的,因此真正的超時生效時間有時要比設定的大,理論上最大值為不使用超時或時效超時再加上獲得時間。另外,應該將“獲得時間”值設置為小于“不使用超時”和“時效超時”的值,否則后兩個參數的意義就打折扣了。
“WAS 5.x中數據源的配置使用及其常見問題有哪些”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。