欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
WAS 5.x中數據源的配置使用及其常見(jiàn)問(wèn)題
2004 年 6 月 24 日
本文將介紹WAS 5.x版本中數據源的配置和使用方法,并結合實(shí)際客戶(hù)遇到的常見(jiàn)問(wèn)題進(jìn)行一些討論,以使更多用戶(hù)能在WAS上順利的配置和使用數據源。
我們先來(lái)看一下使用JDBC1.0的時(shí)候,一般是怎樣來(lái)連接數據庫的。
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()); }
由于建立一個(gè)數據庫連接是一種比較耗時(shí)的操作,在使用JDBC1.0的時(shí)候,如果要提高性能就需要應用程序自己對連接進(jìn)行緩存處理。但是在JDBC2.0 以一個(gè)附加的 API 的方式引入了標準連接池的特性,這個(gè) 附加的 API 叫做 JDBC 2.0 可選包(也稱(chēng)作 JDBC 2.0 標準擴展)。這樣對于支持JDBC2.0的數據庫(一般是指JDBC驅動(dòng)程序支持),WebSphere應用服務(wù)器提供了連接池的支持。JDBC2.0 API 為連接池提供了一個(gè)客戶(hù)端和一個(gè)服務(wù)器端的接口。 客戶(hù)端接口是 javax.sql.DataSource,通常就是應用代碼用來(lái)請求一個(gè)緩沖了的數據庫連接的東西。這個(gè)數據源就是生成數據庫連接對象的工廠(chǎng)。服務(wù)器接口是 javax.sql.ConnectionPoolDataSource,通常是大多數應用服務(wù)器和數據庫JDBC驅動(dòng)打交道的接口。
連接池可改進(jìn)任何需要連接的應用程序(特別是基于 Web 的應用程序,Web 用戶(hù)的連接和斷開(kāi)更為頻繁)的響應時(shí)間。因為連接池的實(shí)現,在客戶(hù)端調用 close()方法的時(shí)候實(shí)際上并不關(guān)閉連接,而是把連接返回到一個(gè)可重用連接的連接池中給其它客戶(hù)端使用。這樣就避免了任何重復打開(kāi)和關(guān)閉數據庫連接造成的開(kāi)銷(xiāo),并且允許大量的客戶(hù)端分享相對較少的數據庫連接,從而提高數據庫操作的性能。為了使用應用服務(wù)器提供的連接池功能,我們需要先定義相應的數據源。數據源在WebSphere應用服務(wù)器中作為資源存在,因此可以統一通過(guò)JNDI來(lái)查詢(xún)它們。
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()); }
使用數據源的另一個(gè)好處是安全性的提高。在不使用數據源的情況下,我們一般通過(guò)下面的代碼來(lái)連接Oracle數據庫。
//裝載JDBC驅動(dòng)程序 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");
這種方式需要把數據庫的用戶(hù)名和口令放在程序的源代碼中。而在WebSphere應用服務(wù)器中我們可以在定義數據源的時(shí)候通過(guò)J2C認證的方式配置數據庫訪(fǎng)問(wèn)別名,從而提升安全性。另外,這種方法也更靈活,如果數據庫用戶(hù)名或口令發(fā)生變化不需要更改應用程序代碼。
很多人在剛開(kāi)始配置WebSphere應用服務(wù)器數據源時(shí)對J2C認證別名很不習慣,覺(jué)得JDBC的東西怎么會(huì )與J2C扯上關(guān)系。我們知道基于J2EE的WEB應用在與后臺EIS(企業(yè)信息系統)集成的過(guò)程中,根據EIS的不同主要有三種連接方式,分別是JDBC,JCA/J2C和JMS。從理論上講,JDBC驅動(dòng)程序是可能歸納成一種特殊的JCA連接器,只不過(guò)這個(gè)連接器后面恰好連接著(zhù)關(guān)系型數據庫。至于實(shí)際標準如何發(fā)展,讓我們拭目以待。下面我們看一下WebSphere應用服務(wù)器中數據庫連接及持久性管理的示意圖。
回頁(yè)首
我們首先概要的看一下在WebSphere應用服務(wù)器中配置和使用數據源所涉及的幾個(gè)環(huán)節。一般的,配置數據源的基本步驟如下:
首先要確認所用的數據庫是支持JDBC2.0的,并確保我們的操作系統環(huán)境設置為支持 JDBC 2.0。這是使用 WebSphere應用服務(wù)器創(chuàng )建的數據源所必需的。這一點(diǎn)在使用UDB DB2 7.2的時(shí)候尤其要注意。
要確定使用哪個(gè)數據源:數據源V4.0還是 V5.0 數據源。
數據源V4.0是使用 WebSphere 舊連接管理器體系結構的 WebSphere 4.x 中的數據源,所有的 EJB1.x 模塊都必須使用此數據源。 WebSphere應用服務(wù)器5.x提供對 V4.0 的 JDBC 連接管理器模型的支持,使得 J2EE 1.2 應用程序能夠不經(jīng)改變地運行。WAS 5.x 也支持J2EE 1.3的應用, J2EE 1.3 應用程序內的 EJB 2.0 模塊,WEB 2.3模塊需要使用 V5.0的JDBC 連接管理器。
創(chuàng )建 JDBC 提供程序。JDBC提供程序指的是JDBC驅動(dòng)程序的類(lèi)型及其相應的驅動(dòng)程序實(shí)現JAVA包。
創(chuàng )建數據源。數據源是在提供特定 JDBC 驅動(dòng)程序實(shí)現類(lèi)的 JDBC 提供程序下創(chuàng )建的。
綁定資源引用。J2EE 1.3標準推薦使用數據源的引用而不是直接使用數據源的名稱(chēng)。
測試連接。WebSphere應用服務(wù)器5.0.x及5.1提供了數據源配置頁(yè)面上提供了測試數據源連接的測試按鈕。
接下來(lái),我們對數據源配置中的最為重要的兩步,即創(chuàng )建 JDBC提供程序時(shí)的配置步驟和創(chuàng )建數據源時(shí)的配置過(guò)程進(jìn)行詳細描述。
如果是第一次配置數據源連接,需要配置JDBC提供程序。配置JDBC提供程序的步驟如下:登錄WAS管理控制臺頁(yè)面,單擊資源 -> JDBC 提供程序 -> 選擇相應的作用域 -> 新建 -> 選擇相應的JDBC提供程序類(lèi)型。
指定JDBC提供程序的作用域,如下圖所示。
的設置取決于實(shí)際WebSphere應用服務(wù)器的拓撲結構。一般有以下三種作用域:
單元
最常規的作用域。在“單元”作用域上定義的資源對于所有節點(diǎn)和服務(wù)器都是可見(jiàn)的,除非它們被覆蓋了。要查看單元作用域中定義的資源,不要在作用域選擇表單中指定服務(wù)器或節點(diǎn)名。
節點(diǎn)
多數資源類(lèi)型的缺省作用域。在“節點(diǎn)”作用域上定義的資源覆蓋任何在“單元”作用域上定義的重復項,并且對于相同節點(diǎn)上的所有服務(wù)器都是可見(jiàn)的,除非它們在該節點(diǎn)上的服務(wù)器作用域中被覆蓋了。要查看節點(diǎn)作用域中定義的資源,不要指定服務(wù)器,但是要在作用域選擇表單中選擇節點(diǎn)名。
服務(wù)器
定義資源的最特定作用域。在“服務(wù)器”作用域上定義的資源覆蓋任何在“單元”作用域或父“節點(diǎn)”作用域上定義的重復資源定義,并且它們僅對于特定服務(wù)器是可見(jiàn)的。要查看服務(wù)器作用域中定義的資源,在作用域選擇表單中指定服務(wù)器名和節點(diǎn)名。
以看出上面三個(gè)作用域的范圍逐漸遞減,并且同名的資源以最小范圍的為準。這個(gè)有點(diǎn)類(lèi)似編程語(yǔ)言中變量的作用域。根據上面作用域的范圍的描述,在單節點(diǎn)的情況下,一般選用“節點(diǎn)”。如果只有一個(gè)應用服務(wù)器實(shí)例也可以選擇“服務(wù)器”。在多個(gè)節點(diǎn)構成的單元中,可以分別在每個(gè)節點(diǎn)上分別定義,也可以選擇“單元”作用域一次性定義。
使用下拉列表選擇要創(chuàng )建的 JDBC 提供程序類(lèi)型,如下圖所示。
如果支持的 JDBC 提供程序類(lèi)型列表不包含我們要使用的 JDBC 提供程序,則選擇用戶(hù)定義的 JDBC 提供程序(User-defined JDBC Provider)。如果數據源需要兩階段提交(2PC)的支持,那么在選擇JDBC驅動(dòng)程序時(shí)需要選擇帶XA支持的驅動(dòng)程序。請查詢(xún) JDBC 提供程序供應商文檔以獲取特定的必需屬性信息。
JDBC提供程序的常規屬性頁(yè)如下圖所示:
這個(gè)頁(yè)面中最為重要的設置是類(lèi)路徑。它是指定共同組成資源提供程序類(lèi)的位置路徑或 JAR 文件名的列表,也即JDBC驅動(dòng)程序類(lèi)包。大部分常見(jiàn)數據庫的JDBC驅動(dòng)程序都以jar文件或zip文件的形式提供。例如 DB2 7.2的JDBC驅動(dòng)程序文件名為db2java.zip,Oracle 8.1.7的JDBC驅動(dòng)程序文件名為classes12.zip,Sybase 12的JDBC驅動(dòng)程序文件名為jconn2.jar等。在WebSphere應用服務(wù)器5.1中,類(lèi)路徑的缺省值反映了相應數據庫更新的JDBC驅動(dòng)程序,例如Oracle 9i的ojdbc14.jar。類(lèi)路徑缺省值中還帶有一個(gè)相應的WebSphere變量,我們可以用絕對路徑替換或定義此WebSphere變量的值。
實(shí)現類(lèi)名指定 JDBC 驅動(dòng)程序實(shí)現的 Java 類(lèi)名。此類(lèi)可用于上面的“類(lèi)路徑”描述中提到的驅動(dòng)程序文件,例如 COM.ibm.db2.jdbc.DB2XADataSource。一般不需要手工填入,采用缺省值即可。但是如果前面JDBC提供程序類(lèi)型選了User-defined JDBC Provider的話(huà)就需要自己修改這個(gè)值。
修改完這些屬性之后按確定并保存就完成了JDBC提供程序的配置。這樣我們就可以在JDBC提供程序的列表中找到我們定義的JDBC提供程序(注意選擇正確的作用域并點(diǎn)擊應用按鈕)。
創(chuàng )建 JDBC 提供程序后,我們就可以創(chuàng )建數據源以訪(fǎng)問(wèn)后端數據存儲。創(chuàng )建新的 V 5.0 數據源的步驟基本如下:
打開(kāi)WAS5.x管理控制臺。
單擊資源 -> JDBC 提供程序。
選擇相應的作用域選項以找要為其創(chuàng )建數據源的 JDBC 提供程序。
選擇我們要創(chuàng )建數據源的 JDBC 資源提供程序,會(huì )出現此提供程序的詳細信息頁(yè)面。
如果我們要創(chuàng )建 V5.0 數據源,則單擊“其它特性”中的數據源。
單擊新建以顯示數據源的配置頁(yè)面,如下圖所示。
這個(gè)頁(yè)面中的幾個(gè)重要的設置如下。
名稱(chēng):指定當前數據源的顯示名稱(chēng)。
JNDI名:指定當前數據源的JNDI名稱(chēng)。其缺省值為“jdbc/顯示名稱(chēng)”。
容器受管持久性:指定此數據源是否用于企業(yè) bean 的容器管理的持久性。 如果選擇此復選框,則為關(guān)系資源適配器創(chuàng )建與此數據源相應的 CMP 連接器工廠(chǎng)。一般的,如果應用程序中有CMP,則需要選上此項。CMP容器生成的JNDI名稱(chēng)為eis/數據源名稱(chēng)_CMP,這個(gè)值在發(fā)布含有CMP的應用時(shí)綁定使用。
語(yǔ)句高速緩存大?。好總€(gè)連接的空閑已準備語(yǔ)句(PreparedStatement)數,也即已準備語(yǔ)句緩存的數目,用以提供性能。如果我們將此數設置得過(guò)高,我們會(huì )缺乏資源,因為系統無(wú)法打開(kāi)那么多已準備語(yǔ)句。一般采用缺省值即可。
組件受管認證別名:此別名用于運行時(shí)的數據庫認證。如果我們的應用程序資源認證(res-auth)設置為應用程序,則在“組件管理的認證別名”中設置別名。
容器受管的認證別名:此別名用于運行時(shí)的數據庫認證。如果我們的應用程序資源認證(res-auth)設置為容器,則設置“容器管理的認證別名”。
WAS5的數據源用J2C的安全認證方式,故一般不需要在應用級別設置用戶(hù)名和口令,而必須定義一個(gè)J2C的認證別名。如果我們的數據庫(例如 Cloudscape)不支持用戶(hù)標識和密碼,則不要在“組件管理的認證別名”或“容器管理的認證別名”字段中設置別名。
如果沒(méi)有事先定義好J2C認證別名(通過(guò)管理控制臺的安全性 -> JAAS配置 -> J2C認證數據),上面的兩個(gè)下拉列表中是沒(méi)有相應的J2C認證別名的??梢酝ㄟ^(guò)點(diǎn)擊應用按鈕,在數據源屬性頁(yè)面的最下面出現“相關(guān)項”,如下圖所示。
再點(diǎn)擊J2C認證數據條目鏈接,然后點(diǎn)擊新建按鈕就可以進(jìn)入到定義它的頁(yè)面,如下圖所示。
上述頁(yè)面中的別名就是標識這個(gè)J2C認證數據條目的,也即出現在數據源定義頁(yè)中容器受管的認證別名和組建受管認證別名列表中的名字。用戶(hù)名和密碼對應目標數據庫的用戶(hù)名和密碼。點(diǎn)擊確定并保存。
現在通過(guò)點(diǎn)擊相應JDBC提供程序的數據源鏈接,可以看到前面定義的數據源。進(jìn)入數據源的配置頁(yè)面,在相應的認證別名的列表中選擇剛才定義的認證別名。
選擇其它屬性欄目中的定制屬性進(jìn)入數據源的定制屬性頁(yè)。這個(gè)頁(yè)面中要定義的屬性與所選數據庫類(lèi)型有關(guān)。一般的,對于DB2數據庫,必須的屬性是databaseName,即所對應數據庫名字。對于Oracle數據庫,必須的屬性是URL,如jdbc:oracle:thin:@localhost:1521:sample。修改完定制屬性之后,點(diǎn)擊確定并保存修改。
我們已定義和保存數據源之后,可以單擊測試連接按鈕以確保此數據源定義中的參數是正確的。在數據源列表頁(yè)上,我們可以同時(shí)選擇多個(gè)數據源并測試它們。一般配置完數據源之后不需要重新啟動(dòng)服務(wù)器,就可以測試成功。但是注意如果我們添加新的 WebSphere 環(huán)境變量或修改它,必須重新啟動(dòng)進(jìn)程(網(wǎng)絡(luò )部署環(huán)境下還要重啟Node Agent 和 Deployment Manager)使這些變量生效。
至此,數據源的基本配置就完成了。但是在很多情況下我們還要對連接池的屬性進(jìn)行調整。通過(guò)點(diǎn)擊數據源配置頁(yè)面中其它屬性的連接池鏈接,可以得到連接池的配置頁(yè)面,如下圖所示。
這個(gè)配置頁(yè)面的幾個(gè)重要屬性說(shuō)明如下:
連接超時(shí):這個(gè)值指定當連接池達到給定連接池的最大值(最大連接數)時(shí)所等待的時(shí)間。當超過(guò)這個(gè)時(shí)間還是沒(méi)有空閑連接時(shí),連接請求超時(shí)并拋出 ConnectionWaitTimeoutException。如果連接超時(shí)設置為 0,則只要必需,池管理器就會(huì )等待直到分配一個(gè)連接為止(這在連接數下降到最大連接數值以下時(shí)發(fā)生)。
最大連接數和最小連接數:這兩個(gè)參數分別指定可以在此池中創(chuàng )建的最大物理連接數和最小物理連接數。應用服務(wù)器啟動(dòng)的時(shí)候,連接池并不建立連接。只有當應用程序請求數據庫連接時(shí),連接池才開(kāi)始建立連接。當連接池中的連接數達到最小連接數之后,此后根據實(shí)際應用程序對數據庫連接的需求,連接池中的連接數就保持在最小連接數和最大連接數之間??梢愿鶕贸绦驅祿爝B接的要求調整這兩個(gè)參數。
不使用超時(shí):這個(gè)參數指定一個(gè)空閑連接在連接池中能夠存活的最大時(shí)間。因為在連接池中保持連接會(huì )消耗系統資源,因此超過(guò)最小連接數的空閑連接會(huì )被定時(shí)清除。不使用超時(shí)設為0時(shí)就不清除空閑連接。
獲得時(shí)間:連接池中的連接由一個(gè)定時(shí)運行的線(xiàn)程進(jìn)行維護。這個(gè)參數就是指定運行連接池維護線(xiàn)程之間的間隔。例如,如果“獲得時(shí)間”設置為 60,則池維護線(xiàn)程每 60 秒運行一次。當池維護線(xiàn)程運行時(shí),它廢棄所有未使用的連接(未使用時(shí)間長(cháng)于“不使用超時(shí)”中指定的時(shí)間值),直到它到達最小連接數中指定的連接數。池維護線(xiàn)程還廢棄所有活動(dòng)時(shí)間長(cháng)于“時(shí)效超時(shí)”中指定的時(shí)間值的連接。獲得時(shí)間間隔還影響性能,因為更短的間隔意味著(zhù)池維護線(xiàn)程將更頻繁的運行并降低性能。要禁用池維持線(xiàn)程,“獲得時(shí)間”設置為 0,或“不使用超時(shí)”和“時(shí)效超時(shí)”都設置為 0。
時(shí)效超時(shí):這個(gè)參數指應用在獲得連接之后而不使用它的最大空閑時(shí)間。超過(guò)大概兩倍時(shí)效超時(shí),這個(gè)空閑連接將被強行放回到連接池(注:這個(gè)工作也是由連接池維護線(xiàn)程來(lái)做的,因為整個(gè)過(guò)程要等待兩個(gè)時(shí)效超時(shí),因此總超時(shí)時(shí)間大概是時(shí)效超時(shí)的兩倍)。如果在放回到連接池之后,應用再去使用這個(gè)連接就會(huì )報StaleConnectionException異常。這個(gè)參數對事務(wù)處理中的連接不生效。時(shí)效超時(shí)設為0時(shí)這個(gè)參數就不生效。這里有一點(diǎn)要注意,雖然WebSphere應用服務(wù)器可以通過(guò)設置這個(gè)參數可以回收應用程序中忘記釋放的數據庫連接,但是在大并發(fā)量用戶(hù)訪(fǎng)問(wèn)的時(shí)候還是會(huì )導致數據庫連接不夠用的異常。因此,盡量保證應用程序中使用完數據庫連接之后及時(shí)放回到連接池中去。
上面三個(gè)參數之間是有一定聯(lián)系的。不使用超時(shí)和時(shí)效超時(shí)都是由連接池維護線(xiàn)程來(lái)進(jìn)行維護和判斷的,因此真正的超時(shí)生效時(shí)間有時(shí)要比設定的大,理論上最大值為不使用超時(shí)或時(shí)效超時(shí)再加上獲得時(shí)間。另外,應該將“獲得時(shí)間”值設置為小于“不使用超時(shí)”和“時(shí)效超時(shí)”的值,否則后兩個(gè)參數的意義就打折扣了。
清除策略:指定檢測到舊文件連接或致命連接錯誤時(shí)指定如何清除連接,即清除策略。它有兩個(gè)候選值,一個(gè)是“整個(gè)連接池”,表示立即關(guān)閉任何未使用的連接。關(guān)閉在使用的連接并在該連接上進(jìn)行下一個(gè)操作期間拋出 StaleConnectionException。來(lái)自應用程序的后繼 getConnection請求導致打開(kāi)到數據庫的新連接。使用此清除策略時(shí),可能會(huì )不必要地關(guān)閉池中不是舊文件連接的一些連接。然而,這種情況不太可能會(huì )發(fā)生。在多數情況下, EntirePool的清除策略是最佳選項。這也是清除策略的缺省值。另一個(gè)是“僅在連接失敗時(shí)”,它表示僅關(guān)閉導致 StaleConnectionException的連接。當此設置消除不必要地關(guān)閉有效連接的可能性時(shí),但從應用程序角度,它使恢復更為復雜。因為僅關(guān)閉了當前失敗連接,極有可能使應用程序的下一個(gè) getConnection請求從池中返回也是舊文件的連接,導致更多舊文件連接異常。
回頁(yè)首
在節點(diǎn)作用域或單元作用域時(shí),數據源中定義的最大連接數是指每個(gè)服務(wù)器實(shí)例的最大連接數還是總的連接數?
無(wú)論定義的資源的作用域是什么,資源的屬性?xún)H在單個(gè)服務(wù)器級別上應用。例如,如果我們在單元級別上定義數據源的作用域(它在該單元內是唯一的),則該單元中的所有用戶(hù)都可以查找和使用該數據源。然而,資源屬性設置對于單元中的每臺服務(wù)器是本地的。例如,如果我們定義最大連接數為 10,那么該單元中的每臺服務(wù)器都可以有 10 個(gè)連接。
使用DB2 7.2與DB2 8.1在配置數據源有什么不一樣的地方嗎?
DB2 7.2缺省支持的JDBC級別是1.0的,因此如果需要使用數據源就必須啟用JDBC2.0。而對于 DB2 V8.1缺省情況下支持 JDBC 2.0。DB2 7.2 JDBC 2.0的啟用參見(jiàn)下面說(shuō)明。
1.在 Windows NT 系統上啟用 DB2 的 JDBC 2.0
要在 Windows NT 系統上啟用 JDBC 2.0 使用:
停止 DB2 JDBC Applet Server 服務(wù)。
運行下列批處理文件:
SQLLIB\java12\usejdbc2.bat
2.確定 Windows NT 系統上用于 DB2 的 JDBC API 的級別
要確定系統上使用的 JDBC 級別:
如果 JDBC 2.0 在使用中,此文件存在于:
SQLLIB\java12\inuse
如果 JDBC 1.0 在使用中,則此文件存在于:
SQLLIB\java11\inuse
或不存在 java11 目錄。
3.在 UNIX 系統上啟用 DB2 的 JDBC 2.0
啟動(dòng) WebSphere Application Server 前,調用 $INSTHOME/sqllib/java12/usejdbc2 以使用 JDBC 2.0。為了方便,我們可能要將其放置在 root 用戶(hù)的啟動(dòng)腳本中。例如,在 AIX 上,將以下內容添加到 root 用戶(hù)的 .profile:
if [ -f /usr/lpp/db2_07_01/java12/usejdbc2 ] ; then . /usr/lpp/db2_07_01/java12/usejdbc2 fi
另外,DB2 7.2與DB2 8.1的JDBC驅動(dòng)程序類(lèi)包已不一樣。前者只需要db2java.zip一個(gè)包,而后者需要db2jcc.jar,db2jcc_license_cu.jar,db2jcc_license_cisuz.jar三個(gè)包。
為什么SystemOut.log日志中經(jīng)常報下列信息。
[03-9-2 17:19:11:916 CST] 6b0e97e8 ConnectionFac I J2CA0122I: 無(wú)法定位資源引用 jdbc/db2ds,因此使用下列缺省值:[Resource-ref settings] res-auth: 1 (APPLICATION) res-isolation-level: 0 (TRANSACTION_NONE) res-sharing-scope: true (SHAREABLE) res-resolution-control: 999 (undefined)
J2EE 1.3的規范里面是推薦通過(guò)引用來(lái)訪(fǎng)問(wèn)各種資源,而不是直接使用資源的名字。對于數據源而言,雖然可以通過(guò)InitialContext的lookup("jdbc/DSName")來(lái)使用,但這不是推薦的做法,而且在SystemOut.log日志中出現上述信息。如果為應用程序模塊定義相應的數據源引用,然后在代碼中用InitialContext的lookup("java:comp/env/DSRefName")就不會(huì )出現上述信息。
問(wèn)題描述1:在A(yíng)IX 5L的環(huán)境中,WAS5.01連DB2 7.2,測試連接失敗。瀏覽器上顯示的錯誤信息如下:
Test Connection failed for datasource DSNAME on server server1 at node NODENAME with the following exception: java.sql.SQLException: SQLAllocEnv() Error: rc = -1. View JVM logs for further details.
在SystemOut.log日志中的異常信息如下:
[2/27/04 18:03:04:596 CST] 227c82c1 DataSourceCon E DSRA8040I: Failed to connect to the DataSource. Encountered : java.lang.Exception: java.sql.SQLException: SQLAllocEnv() Error: rc = -1 at com.ibm.ws.rsadapter.DSConfigurationHelper.testConnectionForGUI(DSConfigurationHelper.java:1786) at java.lang.reflect.Method.invoke(Native Method)
問(wèn)題描述2:在A(yíng)IX 5L的環(huán)境中,WAS 5.1連DB2 7.2,測試連接失敗。瀏覽器顯示的錯誤信息如下:
測試節點(diǎn) swf50 的服務(wù)器 server1 上的數據源 TestDS 失敗,含有以下異常:java.lang.Exception: java.sql.SQLException: java.lang.UnsatisfiedLinkError: Can‘t find library db2jdbc (libdb2jdbc.a or .so) in sun.boot.library.path or java.library.path sun.boot.library.path=/usr/WebSphere/AppServer51/java/jre/bin java.library.path= /usr/WebSphere/AppServer51/java/bin:…
在SystemOut.log日志中的異常信息如下:
[3/1/04 14:16:32:011 GMT+08:00] 1f05499b DataSourceCon E DSRA8040I: Failed to connect to the DataSource. Encountered : java.lang.Exception: java.sql.SQLException: java.lang.UnsatisfiedLinkError: Can‘t find library db2jdbc (libdb2jdbc.a or .so) in sun.boot.library.path or java.library.path sun.boot.library.path=/usr/WebSphere/AppServer51/java/jre/bin java.library.path=/usr/WebSphere/AppServer51/java/bin:…
(實(shí)際上,libdb2jdbc.so文件在/usr/lpp/db2_07_01/java12目錄下確實(shí)存在。)
這兩個(gè)問(wèn)題都是WAS 5.x與DB2 7.2連接時(shí)常見(jiàn)的一個(gè)問(wèn)題。根據出錯的信息判斷,應該與DB2的環(huán)境設置,或與WAS結合的環(huán)境設置有關(guān)。這個(gè)問(wèn)題可以通過(guò)下面方式解決:在setupCmdLine.sh文件中或在startServer.sh中添加下面代碼:
. /home/db2inst1/sqllib/db2profile
問(wèn)題描述:應用程序需要連接Oracle8.1.7,在單服務(wù)器上測試通過(guò),在雙機集群環(huán)境下配置的數據源用應用服務(wù)器提供的“測試”按鈕也測試通過(guò),但是應用發(fā)布到集群上之后,WEB模塊連數據庫還是報異常。
由于應用服務(wù)器中配置的數據源測試通過(guò),因此我們主要檢查應用的代碼。通過(guò)檢查代碼發(fā)現用戶(hù)應用中連接數據的代碼參考了原先WebSphere應用服務(wù)器3.x連數據源的代碼,主要片斷如下:
public static String SYSTEM_DATASOURCE_URL = "jdbc:oracle:thin:system/manager@192.168.0.1:1521:DBName"; public static String JNDI_PROVIDER_URL = "iiop://127.0.0.1"; public static String INITIAL_CONTEXT_FACTORY = "com.ibm.websphere.naming.WsnInitialContextFactory"; javax.sql.DataSource dataSource = null; try { java.util.Hashtable parms = new java.util.Hashtable(); parms.put( javax.naming.Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY); parms.put( javax.naming.Context.PROVIDER_URL, JNDI_PROVIDER_URL); javax.naming.Context context = new javax.naming.InitialContext(parms); dataSource = (javax.sql.DataSource) context.lookup(jndiName);
在WebSphere應用服務(wù)器5.x版本,一般用缺省的InitialContext()方法即可,除非環(huán)境比較特殊,比如更改了缺省的bootstrap端口,或客戶(hù)端是非WebSphere應用服務(wù)器環(huán)境等。而上述問(wèn)題可以通過(guò)把代碼更改為簡(jiǎn)單的InitialContext()方法即可在集群環(huán)境中正常使用。
問(wèn)題描述:應用程序在WebSphere應用服務(wù)器5上運行,數據庫是Oracle 8.1.7,在JVM錯誤日志SystemErr.log中偶爾報下面異常信息。
4:17:27:066 GMT-08:00] 5790ff71 SystemErr R SystemBllBean.getProjTypeThrees() error!Exhausted Resultset [2/20/04 14:19:51:145 GMT-08:00] 2bafbf43 SystemErr R Method executeQuery throws Exception!DSRA9110E: Statement is closed. [2/20/04 14:19:51:146 GMT-08:00] 2bafbf43 SystemErr R ProjectApplySrv.getProjApplys() error !DSRA9110E: Statement is closed. [2/20/04 14:20:47:526 GMT-08:00] 26a17f44 SystemErr R [2/20/04 14:35:33:543 GMT-08:00] 708a7f71 SystemErr R Exhausted Resultset [2/20/04 15:29:49:930 GMT-08:00] 78a83f4c SystemErr R SystemBllBean.getProjTypeFours() error!Exhausted Resultset [2/20/04 15:55:43:669 GMT-08:00] 5790ff71 SystemErr R Exhausted Resultset
根據Oracle官方網(wǎng)站上FAQ提供的信息,Exhausted Resultset一般發(fā)生在用Oracle JDBC Thin Driver連接Oracle數據庫的環(huán)境中,其主要原因是由于Statement/PreparedStatement提前關(guān)閉了,之后又去調用ResultSet。數據庫連接的一般使用方法是:生成或得到Connectionà生成Statement/PrepareStatement -> executeQuery()得到ResultSet。用完之后在finally語(yǔ)句中依次關(guān)閉ResultSet, Statement, Connection。程序員一般都知道這個(gè)順序,那究竟是怎么回事呢?看一下應用訪(fǎng)問(wèn)數據庫的代碼吧。
這個(gè)應用程序有一個(gè)專(zhuān)門(mén)操作數據庫的JavaBean,例如DBBean其中相關(guān)的方法如下:
//得到ResultSet的方法 public ResultSet executeQuery(String sql) throws SQLException { ResultSet rs = null; try { this.conn = getConnection(); PreparedStatement pstmt = this.conn.prepareStatement(sql); rs = pstmt.executeQuery(); return rs; } catch (SQLException e) { System.err.println(" Method executeQuery throws Exception!" + e.getMessage()); throw e; } } //關(guān)閉數據庫連接的方法 public void close() throws SQLException { try { if (this.conn != null && !conn.isClosed()) { this.conn.close(); } } catch (SQLException e) { System.err.println(" Method close throws Exception!" + e.getMessage()); throw e; } }
其它程序代碼里面通過(guò)下面的方式來(lái)操作數據庫。
strSQL = …; DBBean MyDBBean = new DBBean(); rs = MyDBBean .executeQuery(strSQL); if(rs != null){ while ( rs.next()) { … } catch () {} finally { try { if(rs != null) {rs.close();rs = null;} MyDBBean.close(); } catch (SQLException re) { … }
通過(guò)分析這幾段代碼,我們可以發(fā)現pstmt沒(méi)有顯式地關(guān)閉。只是因為pstmt是executeQuery(String sql)方法的局部變量,因此在其他類(lèi)調用的時(shí)候沒(méi)有辦法直接顯示關(guān)閉。而實(shí)際上rs = MyDBBean .executeQuery(strSQL);中的方法返回時(shí)pstmt變量已經(jīng)失效,只是JAVA語(yǔ)言并不一定馬上回收它。因此當得到一個(gè)比較大的結果集的時(shí)候,上述Exhausted Resultset問(wèn)題就容易出現。解決的方法是修改代碼結構,根據實(shí)際情況用完之后及時(shí)關(guān)閉相應的資源。
回頁(yè)首
由于大部分J2EE應用程序都需要通過(guò)JDBC連接數據庫,因此數據源的配置是WebSphere應用服務(wù)器中最為常用的配置之一。希望通過(guò)對數據源的配置和使用的討論,使得我們能更好地使用它。如果想了解更多的WebSphere應用服務(wù)器的資料,請參考相關(guān)的IBM紅皮書(shū)和WebSphere應用服務(wù)器的信息中心(infocenter)。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Websphere 6.1下Oracle數據源配置
在WebSphere部署WAR應用
JAVA如何連接數據庫
JSP漸進(jìn)學(xué)習教程8
Mybatis中類(lèi)型映射處理器詳解
java 和數據庫問(wèn)題,入門(mén)者編
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久