编程语言
首页 > 编程语言> > Java-Websphere 8.5和SpringServletContainerInitializer

Java-Websphere 8.5和SpringServletContainerInitializer

作者:互联网

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

我们正在使用SpringSpringServletContainerInitializer来初始化我们的应用程序,该应用程序使用驻留在我们代码中的WebApplicationInitializer的相应实例.这种方法在Tomcat中有效,但是当部署到Websphere 8.5.0.1时,SpringServletContainerInitializer无法在我们的代码中找到WebApplicationInitializer接口的实现,因此不会创建Spring MVC调度程序servlet.

我们发现在线one blog post作者无法使用它.

我们试图弄乱类加载器,类加载顺序,并通过其他方法验证Servlet 3.0是否可以在容器中工作,并且看来还可以.使用WAS类加载器查看器,我们可以看到已加载SpringServletContainerInitializer类和WebApplicationInitializer接口,但未加载WebApplicationInitializer实现.

有人在Websphere中尝试过吗?我们认为这可能是类加载器的问题,但最终还是毫无头绪.

解决方法:

我有同样的问题.问题是由以下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处失败),此时我的应用程序开始工作.一个大小不能全部满足,因为缓存大小被WebSphere节点的JVM上的系统属性所覆盖,因此适当的大小将取决于该节点上正在运行的应用程序.它们(及其JAR)如何使用注释,因此,在确定应用程序的正确值之前,使用此设置将很重要.

我使用的JVM系统属性是-Dclassinfocachesize = 16000

标签:servlet-3-0,websphere,java,spring-mvc
来源: https://codeday.me/bug/20191031/1972770.html