我想我发现了 Jetty 和 Wildfly 之间过滤器初始化的实现不同。
我有一个使用 Tapestry、Spring 和 Hibernate 的 Web 应用程序。我正在尝试将其从 Jetty 迁移到 Wildfly。
我的 web.xml 有两个过滤器:
首先是 OpenSessionInViewFilter(执行 doInternalFilter 时需要 WebApplicationContext 存在)。这个过滤器需要在 Tapestry 之前,以便休眠会话包含针对后端数据库的所有 Tapestry 活动。
其次是 Tapestry 框架(带有 spring 集成)过滤器,它在它的init方法中加载 spring 的 WebApplicationContext。
我在 Jetty(也在 Tomcat 中)运行这个场景没有问题,但是当将它移动到 Wildfly 时,OpenSessionInViewFilter 抛出了一个 IllegalStateException,告诉我没有找到 WebApplicationContext。
我尝试对此进行调试,发现 Wildfly 直到 Filter 收到第一个要处理的请求时才调用init Filter 方法。我同意这在某些情况下可能会提高性能,但在我当前的情况下这是一个问题。
有没有办法告诉 Wildfly 在应用程序启动时初始化过滤器?
谢谢你。