2013-04-03 100 views
3

我們最近將我們的應用程序從servlet 2.5轉換爲servlet 3.0,以便我們可以使用動態servlet配置。Websphere 8.5和SpringServletContainerInitializer

我們使用Spring的SpringServletContainerInitializer來初始化我們的應用程序,並在我們的代碼中生成一個WebApplicationInitializer對應的實例。這種方法適用於Tomcat,但是當部署到Websphere 8.5.0.1時,SpringServletContainerInitializer無法在我們的代碼中找到WebApplicationInitializer接口的實現,所以我們的Spring MVC調度程序servlet未創建。

我們在網上發現了one blog post,作者無法啓動它。

我們已經嘗試過使用類加載器,類加載命令和驗證servlet 3.0通過其他方式在容器中工作,並且它看起來沒問題。使用WAS類加載器查看器,我們可以看到SpringServletContainerInitializer類和WebApplicationInitializer接口已加載,但未加載我們的WebApplicationInitializer實現。

有沒有人在Websphere中試過這個?我們認爲這可能是一個類加載器問題,但最終是無能爲力。

+1

您是否試過WebSphere論壇? https://www.ibm.com/developerworks/community/forums/html/forum?id=11111111-0000-0000-0000-000000000266 – dbreaux

+3

看起來我們可能正在擺脫WebSphere。這花費了我們幾周的生產力(在這樣的問題上),並且似乎提供了組織計劃使用的非常小的價值。 –

+1

然而,我知道這是一個老評論 - 如果你真的沒有在一些非常商業和必須認證的環境(銀行等)絕對沒有用處,那麼現在有了websphere。這隻會讓開發人員變得更慢,而IBM RAD也無濟於事。你解決了這個問題嗎?在websphere 8中運行spring boot + vaadin應用程序時遇到同樣的問題。5 – Mejmo

回答

1

我有完全相同的問題。問題是由以下APAR http://www-01.ibm.com/support/docview.wss?uid=swg1PM85177修復的WebSphere中的缺陷。由於缺陷緩存已滿,WebSphere構建了註釋緩存&它丟棄了以前緩存的註釋,導致SpringServletContainerInitializer未找到WebApplicationInitializer的所有實現。

此APAR已在8.0.0.8中發佈&定於8.5.5.2,而定於4月28日。與此同時,我設法將緩存的大小從默認值2000增加到16000(失敗時爲4000 & 8000),此時我的應用程序開始工作。由於緩存大小已被JVM上的WebSphere節點上的系統屬性所覆蓋,因此適當的大小將取決於該節點上運行的應用程序的大小,因此其大小將取決於該節點上運行的應用程序的大小。&(他們的JAR中的&)如何使用註釋,因此它將使用此設置玩遊戲至關重要,直到確定您的應用程序的正確值。

我使用的JVM系統屬性是-Dclassinfocachesize = 16000

3

我剛看到這個貼子。在調試類加載器問題時,WebSphere提供的跟蹤功能在啓用時可以提供有關正在進行或未進行的更多詳細信息。如果您打開PMR,它將在IBM Support支持的mustgather數據中提供。但是閱讀和理解輸出很容易。

http://www-01.ibm.com/support/docview.wss?uid=swg21196187#show-hide 下的 「收集數據手動」 跟蹤字符串使用的是

com.ibm.ws.classloader。* =所有

相關問題