轉自: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緩衝池時在"組件受管認證別名"和"容器受管的認證別名"已經選中了我設置的數據庫用戶。