2013-04-03 99 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。* =所有

相关问题