轉:IBM WAS5.x "無法定位資源引用 jdbc/DSName,因此使用下列缺省值"問題解決方案...

轉自:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1236159

ConnectionFac I J2CA0122I: 無法定位資源引用 jdbc/DSName,因此使用下列缺省值:[Resource-ref settings]

 res-auth:                 1 (APPLICATION)
 res-isolation-level:      0 (TRANSACTION_NONE)
 res-sharing-scope:        true (SHAREABLE)
 res-resolution-control:   999 (undefined)
[Other attributes]

isCMP1_x:                 false (not CMP1.x)
isJMS:                 false (not JMS)


公司一直用WSAD開發,服務器總是System.out這個問題,雖然不是錯誤,但是很煩人,想去掉了,問了不少人,也google了很多次,沒有找到解決辦法。今天百度了一下,終於解決了(看來還是多個搜索引擎並存的好,至少多了一個選擇)。

準備寫一個,但是原來寫得很好,就轉一下吧,希望這個帖子能儘快收錄到google,幫助不明白此問題的網友找到答案。

==>>>以下爲轉帖內容:

那天他們把43的數據庫連接改成了緩衝池,在WAS上調程序的時候發現LOG里老有如下信息:

ConnectionFac I J2CA0122I: 無法定位資源引用 jdbc/DSName,因此使用下列缺省值:[Resource-ref settings]

 res-auth:                 1 (APPLICATION)
 res-isolation-level:      0 (TRANSACTION_NONE)
 res-sharing-scope:        true (SHAREABLE)
 res-resolution-control:   999 (undefined)
[Other attributes]

isCMP1_x:                 false (not CMP1.x)
isJMS:                 false (not JMS)

是在每一次連接數據庫時,爲什麼呢?數據庫的連接沒有問題,對數據庫的操作也沒有受到一點兒影響……?
後來到網上SEARCH了一下,發現好多人都遇到了這個問題,當然也找到了解決的辦法。但,不行!
因爲事兒多所以就耽誤了下來,正好今天IBM軟件部的胡鵬飛來給我們講WAS6(好傢伙,5天的課程,今天一天全都突擊出來)。
下午講完課後我問他這個問題如何解決,他告訴我如何如何解決。他的方法與我的一樣,可我的爲什麼不行呢?

解決方法如下:

J2EE 1.3的規範裏面是推薦通過引用來訪問各種資源,而不是直接使用資源的名字。對於數據源而言,雖然可以通過InitialContext的lookup ("jdbc/DSName")來使用,但這不是推薦的做法,而且在SystemOut.log日誌中出現上述信息。如果爲應用程序模塊定義相應的數據源 引用,然後在代碼中用InitialContext的lookup("java:comp/env/DSRefName")就不會出現上述信息。
主要是要把web.xml中的resource-ref標記設爲
<resource-ref id="ResourceRef_#">
  <res-ref-name>jdbc/DSName</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>CONTAINER</res-auth>
  <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
在JAVA使用緩衝池連接數據庫時這樣寫:
...........
Context ctx = new InitialContext();
javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/DSName");
connection = ds.getConnection();
............

我 在WAS的控制管理器中說什麼也沒有找到設置resource-ref的地方,後來我想是不是應該重新部署一下應用呢?我嫌麻煩就沒有做,胡鵬飛告訴我要 設置resource-ref只能重新部署應用。如果手工改文件比較麻煩,因爲在ibm-web-bnd.xmi和ibm-web-ext.xmi都要做 綁定。他建議我先在WSAD中設置完再把這三個文件複製到WAS裏。並且在應用服務器的config目錄裏也要有相應的修改,因爲WAS讀的是 config目錄下的配置,不是企業應用。
sigh,恍然大悟啊,明白了,MD因爲WAS還牽扯到集羣方面,所以它不能從企業應用讀配置文件。我 還是懶,所以我要手工改。嘿嘿!web.xml早就改好了:D,我把ibm-web-bnd.xmi和ibm-web-ext.xmi打開,將與 resource-ref所對應該的地方改好,當然config目錄也是同樣。重起了服務器後,再試。如然好了!:p

ibm-web-bnd.xmi和ibm-web-ext.xmi裏綁定代碼分別是:

[ibm-web-bnd.xmi]
.......
<resRefBindings xmi:id="ResourceRefBinding_#" jndiName="jdbc/DSName">
  <bindingResourceRef href="WEB-INF/web.xml#ResourceRef_#"/>
</resRefBindings>
.......

[ibm-web-ext.xmi]
.......
<resourceRefExtensions xmi:id="ResourceRefExtension_#" connectionManagementPolicy="Default">
  <resourceRef href="WEB-INF/web.xml#ResourceRef_#"/>
</resourceRefExtensions>
.......

note:代碼基本上是放在<webApp href="WEB-INF/web.xml#WebApp_ID"/>標記的下面。

有幾項注意的就是,
一、如果企業應用已經部署好了要對resource-ref,換句話說要改web.xml的設置,最好在外面改好比如WSAD裏,再重新部署進WAS裏。
二、如要手工改的話別忘了ibm-web-bnd.xmi和ibm-web-ext.xmi這兩個問題要做關聯的設置,還有應用服務的config目錄。
三、爲什麼我在JAVA連數據庫時沒有在getConnection時加入用戶名和密碼呢,嘿嘿,因爲在WAS的JAAS下的J2C設好了用戶,並在設置JDBC緩衝池時在"組件受管認證別名"和"容器受管的認證別名"已經選中了我設置的數據庫用戶。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章