1. 程式人生 > >was8.5.0.1jar包衝突報錯("*** incompatible with ***")及db2資料來源問題:“操作無效:已關閉result set,errorcode=-4470

was8.5.0.1jar包衝突報錯("*** incompatible with ***")及db2資料來源問題:“操作無效:已關閉result set,errorcode=-4470

最近開發環境的was叢集出現了問題,運維人員粗暴的剷掉了所有的環境,然後新建了叢集。。。

接下來的部署過程中遇到了不少問題,記錄下來,方便自己,方便有需要的朋友

1,was版本:8.5.0.1,資料庫配置為jndi方式

問題1:

在叢集上部署專案war包後啟動過程中,伺服器、各節點在was前端頁面沒有任何提示,但瀏覽器訪問專案路徑時,提示”網頁找不到“,猜測時was啟動時遇到了問題。

在查看了was的日誌後(路徑:/IBM/WebsPhere/AppServer/profiles/Appserv02/logs/節點名稱/SystemOut.log、SystemErr.log),在SystemOut.log日誌中看到這樣一句:

這句錯誤的上方有一句:

按照這句的路徑,在/ffdc下找到對應txt檔案:14.09.25.4035850266934009384917.txt,可以看到詳細錯誤資訊:

找到這裡,原因出來了,war包中的jar包和was中的jar包衝突導致,專案中使用的QuartzInitializerServlet和javax的Servlet相矛盾

網上有幾種解決辦法,

因為專案許可權控制比較嚴,我沒有新建共享庫等敏感操作和修改db2資料庫設定並重啟資料庫的許可權。。。

所以採用了2的解決辦法(在做另一個專案時當時也遇到jar包衝突):

a,修改war程式的類載入順序為圖中所示:

b,修改war的”類裝入和更新檢測“為圖中所示:

注意:應先嚐試勾選的組合1為:類裝入器順序:勾選第二個;war類裝入器策略:勾選第二個;然後啟動war程式,測試訪問結果(此種組合在另一專案中解決了問題)

若仍失敗,日誌中仍顯示war包衝突,採用下圖組合2方式:即:勾選第一個,勾選第二個(本專案解決問題)

啟動war程式,瀏覽器測試,系統首頁訪問成功;

小結:

        java應用啟動過程中,有一個固定的類載入過程,如先載入jdk中的jar包,後為class檔案,然後為webinfo下lib中的jar包(視專案具體情況),was的類載入順序可在控制檯檢視:

對於衝突的jar包,解決原則就是,分開載入,共享庫也好,類載入順序調整也一樣,都是避免相沖突的jar包載入過程中衝突,導致載入失敗;

問題2:在修復了war啟動報錯後,登陸時提示登陸失敗。。。

在查看了was的SystemErr.log檔案後,發現這樣一句錯誤:

多方搜尋,確定問題為資料來源配置問題,涉及到db2的邊界事務情景:

最終,把was和資料來源的坑填好了。。。