WebSphere 6.0 + DB2 部署心得

近期的一個項目分行指定在WebSphere+DB2上運行,由於第一次接觸這兩個系統,所有在開發過程中一直使用Tomcat 5.5+DB2這樣的一個環境,運行一直很好。可是在最後往WebSphere上部署時,遇到了很多的麻煩。
 
一、WebSphere部署遇難題
 
經過多次的反覆的部署,應用程序就是無法運行。由於對WebSphere不熟,一開始以爲是WebSphere安裝和配置的問題,就反覆在安裝和配置上搗鼓。後來潛下心來仔細研究了了一下WebSphere的運行時錯誤信息,找到了錯誤日誌的位置。(順便說一句,IBM的東東路徑實在是太複雜了,找一個配置文件簡直象進入了十八層地獄一般)。一看明白了,原來是某某類的某方法沒找到。
 
結合以前知道的一些關於IBM的知識,立即知道這是JDK的問題。IBM使用自己的JDK,版本是4.1.2。而我在項目中使用的是5.0。於是立即回到IDEA中,把項目的JDK設爲WebSphere 6.0自帶的JDK,然後加上WebSphere的Runtime Lib。於是,IDEA象開殺戒一樣,項目裏面一片紅色標記。我改改改,把所有用到Java 5的地方全降成1.4的,有點忍痛割愛的感覺。然後編譯,心想這下應該沒問題了吧。
 
再部署,一帆風順。網站模塊也運行起來,那個高興啊。心情舒暢的打開瀏覽器,一運行,NND,還是報錯。查看WebSphere系統日誌,沒有任何錯誤信息,真的把人氣壞了。因爲不知道如何調試WebSphere,只好編譯一次部署一次再運行一次。最後才發現,是剛纔給代碼動手術的時候,返回值的XML少加了一個空格,造成返回值的XML無效。該死的XMLHttp。
 
以爲惡夢到此爲止,興沖沖的再次運行。結果登錄界面出來了,有點激動。輸入登錄信息,確定。“對象無效”的該死提示再次冒出來。出這個錯誤,百分百是服務器的問題。出鬼了都。
 
趕緊扒出系統日誌,看到了一大堆“Class can't be find”這樣的錯誤,這種錯誤心裏會好受些。很快的找到是什麼類:java.lang.NoClassDefFoundError: javax/sql/rowset/CachedRowSet。 老辦法,Google搜。
 
問題水落石出。spring的sqlRowSet使用的是JDK1.5的CachedRowSet實現。按照spring官方的解釋,找到了spring自帶的一個rowset.jar部署上去。結果還是出錯。就在我快崩潰的時候,在網上發現了一位高手發的帖子:
 

使用最新sun公司的rowset.jar包的請注意

從sun公司下載的最新的rowset文件名是jdbc_rowset_tiger-1_0_1-mrel-ri.zip
這是個新的rowset版本,最令人感興趣的當然是裏面的CachedRowSet類,可是這個版本中,CachedRowSet並沒有作爲一個直接可使用的類,而是定義爲一個接口。爲此,在新版本中,增加了一個CachedRowSetImpl類,它實現了CachedRowSet類,只要調用new CachedRowSetImpl(),就可以創建一個CachedRowSet對象,但就是這個new CachedRowSetImpl(),在使用時讓人頭痛不已。程序執行這個語句會拋出異常。根本用不了。
經過一番查找,終於在國外同仁的一個貼子上找到了問題所在!
原來是這個rowset最新版本的一個BUG。不敢獨享,拿來與大家共用:
解決方法:
(1)解壓jdbc_rowset_tiger-1_0_1-mrel-ri.zip,產生rowset.jar文件
(2)再解壓rowset.jar文檔,在產生的com/sun/rowset目錄下找到RowSetResourceBundle.properties文件。
(3)將RowSetResourceBundle.properties更名爲RowSetResourceBundle_CN.properties
說明:這裏_CN表示所處中國。不同的國家,這個名稱不同
經過以上的步驟
就可以正常使用new CachedRowSetImpl()啦.

 
按照這個辦法一修復,問題全部搞定。
 
二、DB2 又怎麼了?
 
很快又回到了我在部署TomCat是遇到的同樣問題,在WebSphere中提示找不到“COM.ibm.db2.jdbc.app.DB2Driver”類的驅動。
 
解決這個問題的辦法是:
1、換成COM.ibm.db2.jcc.DB2Driver,第4類驅動程序。OK。
2、在WebSphere的startServer.sh腳本中運行db2profile腳本,該腳本在DB2的home目錄下的sqllib目錄中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章