1

我想我发现了 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 在应用程序启动时初始化过滤器?

谢谢你。

4

1 回答 1

4

我通过 undertow 子系统中的配置选项发送了公开此功能的拉取请求。

您现在可以添加

<servlet-container name="default" eager-filter-initialization="true">

启用此功能。

于 2014-03-07T23:07:59.023 回答