我有一個web項目,用的strtus框架。
正常情況下,打包成war後,在websphere正式版的控制檯裏發佈,沒有問題,我想把他移植到到wasce中,相同的war文件,或者相同的目錄結構,卻失敗了。
查了些資料後,發現根本原因是部署描述符文件錯。
前面的文章講到過,geronimo項目需要部署描述符文件來描述各模塊的關係,這是個很重要的文件。我的項目是個web項目,文件名叫geronimo-web.xml。
在單獨的tomcat裏發佈時,是不需要這個文件的。
websphere正式版在發佈時,會自動分析項目目錄,自動把部署描述符文件加上去。
我下面就把我遇到的問題,以及我怎麼解決的寫出來。
首先,把war包原樣發佈後,提示classnotfound錯誤。原因呢,就是我這個項目使用了org.apache.commons.digester模塊,geronimo本身自帶了這個模塊,而且是優先運行的,他的classloader的級別比web項目的classloader的級別高,造成找到不項目中的class。
解決辦法:在geronimo-web.xml中加入下面元素
<sys:hidden-classes>
<sys:filter>org.apache.commons.digester</sys:filter>
</sys:hidden-classes>
意思是讓org.apache.commons.digester優先在當前classloader下運行。hidden-classes就是啓這個作用的。
well,這個問題解決了,又有了新錯誤,提示找不到saxexception類。
我的項目中使用了sax來處理xml。
在geronimo安裝目錄下的lib/endorsed目錄裏,自帶了xerces和xml包。geronino中,這個lib目錄下的包是優先於應用程序下的lib中的包的加載的。所以造成一些錯誤。
我把geronimo安裝目錄下的lib/endorsed目錄裏的xerces和xml包刪除,程序運行正常了。
通過這個例子,部署描述符文件也是蠻重要的。
下面是這些描述符文件的規範說明,有時間大家可以去看看.
http://publib.boulder.ibm.com/wasce/V1.1.0/en/Reference/Plans/index.html