2014-01-24 37 views
0

我有一個簡單的Portlet可以在WebSohere Portal Server中進行部署。WebSphere Portal Server ClassLoader在重新部署後無法工作

這是一個war文件,在其lib文件夾中包含一個jar文件。在jar文件裏面,我嘗試讀取一個屬性文件。在我的portlet項目中,我在src的根目錄中有一個屬性文件,並且可以在沒有問題的情況下讀取jar文件。

但是,如果我重新部署war文件並且不重新啓動服務器,則下面的代碼行將返回null,並且它無法從屬性文件讀取。重新啓動服務器後,一切都恢復正常。 ()。getClassLoader()。getResourceAsStream(「myFile.properties」);方法如下:InputStream inStream = this.getClass()。getClassLoader()。getResourceAsStream(「myFile.properties」);

我檢查了ClassLoader的設置,父母是LAST。我不知道是什麼原因。任何想法?

回答

0

嘗試使用上下文類加載器而不是類的類加載器,因爲您沒有將類中的資源捆綁到類中(如果我正確地閱讀了您的描述)。

Thread.currentThread().getContextClassLoader().getResourceAsStream(...)

你碰巧有這樣的罐子在另一個Web模塊或者是在WebSphere共享庫文件夾?由於你描述的行爲是空的,而不僅僅是舊的文件值,所以我不太傾向於認爲緩存是涉及的,更多的是你得到的是不同於你想象的類的實例,因爲你使用的是類加載器實用程序類本身,Web模塊的WEB-INF /類中的屬性文件未找到。

+0

它的工作!謝謝。重新部署之前和之後的war文件也是相同的,jar文件位於WEB-INF/lib中。我認爲它與webSphere配置有關,而不是戰爭文件... – Mahsa

0

由於性能原因,文件被讀取一次並緩存。

編輯:如果您希望修改文件,請將文件保存在本地文件系統的EAR文件之外,並使用環境/服務器變量指向其路徑。請參閱代碼中的變量以加載文件。

+0

所以,你的意思是重新部署後不可能有inputStream嗎?那我該如何再次訪問它? – Mahsa

+0

您可以嘗試清除temp和wstemp目錄。但是這也涉及重新啓動應用程序服務器。第二十二條軍規。 :) – crnlx

+0

謝謝,但我不想重新啓動服務器...是否還有其他解決方案? – Mahsa

相關問題