你指的是原來的問題有兩個部分。一個是關於ZIPException
。由於該異常是在WebSphere代碼中深入觸發的,因此您不太可能在此處獲得針對該問題的解決方案。您應該聯繫IBM支持。另一部分是關於內存問題。從我使用部署在WebSphere JAX-WS服務(和使用一般的WebSphere)的經驗,我可以提出兩點建議:
原來的問題說,出現問題「幾部署後」。這引發了一個類加載器泄漏。類加載器泄漏是一種特殊的內存泄漏,它可以防止應用程序的舊類加載器在重新部署或重新啓動應用程序後被垃圾收集(有關更詳細的說明,請參閱here)。這可能是由應用程序或服務器運行時造成的。經驗表明,WebSphere本身存在幾個導致此類泄漏的問題,而IBM在解決這些問題方面一般效率不高。我曾經編譯過我遇到過的這種類型的已知WebSphere問題的列表。它被出版here。可以看到,基本上任何或多或少複雜的Java EE應用程序都會受到這類問題的影響。因此,您應該做好準備,以便在不重新啓動服務器的情況下頻繁重新部署時,最終會耗盡內存。
注意:爲了保護IBM,應該說其他應用程序服務器在這方面不一定表現更好。
有一種特殊情況,在WebSphere上部署的JAX-WS服務可能會消耗大量內存。這發生在使用自頂向下方法(即從WSDL開始)開發的服務上,但其中有不涉及原始WSDL的註釋。在這種情況下,WebSphere(非常正確地)認爲它們是自下而上的服務,並基於JAX-WS/JAXB2註釋生成WSDL和XML Schema文檔。這些文檔保存在內存中,並且在某些情況下(特別是對於複雜服務)可能比原始的WSDL和XML Schema文檔大很多。我曾經看到一個應用程序正在爲此消耗200MB的堆。爲避免這種情況,請確保在創建自頂向下的JAX-WS服務時,將原始WSDL和XML Schema文檔打包到應用程序中,並且服務實現具有正確引用這些文檔的@WebService
註釋。