Websphere 8.5和SpringServletContainerInitializer

时间:2013-04-03 15:57:54

标签: java spring-mvc websphere servlet-3.0

我们最近将我们的应用程序从servlet 2.5转换为servlet 3.0,以便我们可以使用动态servlet配置。

我们正在使用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中尝试过这个?我们认为它可能是一个类加载器问题但最终是无能为力的。

2 个答案:

答案 0 :(得分:3)

我刚看到这个帖子。在调试类加载器问题时,WebSphere提供跟踪,当启用时,可以提供有关正在进行或未进行的更多详细信息。它是在必须收集的数据中提供的,如果您打开PMR,IBM Support会请求该数据。但是阅读和理解输出很容易。

http://www-01.ibm.com/support/docview.wss?uid=swg21196187#show-hide 在“手动收集数据”下,要使用的跟踪字符串是

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

答案 1 :(得分: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