2014-02-17 57 views
1

我想我發現了在Jetty和Wildfly之間的Filter初始化實現方面的差異。蜻蜓「懶惰」過濾器,我可以改變它嗎?

我使用Tapestry,Spring和Hibernate的Web應用程序。我正試圖將它從Jetty遷移到Wildfly。

我web.xml中有兩個過濾器:

首先所述的OpenSessionInViewFilter(這需要WebApplicationContext被執行doInternalFilter時存在)。這個過濾器需要在Tapestry之前,以便hibernate會話包含所有針對後端數據庫的Tapestry活動。

其次就是Tapestry框架(w/spring集成)過濾器其中的init方法加載Spring的WebApplicationContext。

我在Jetty(也是在Tomcat中)沒有問題的情況下運行這個場景,但是當它移動到Wildfly時,OpenSessionInViewFilter拋出一個IllegalStateException異常,告訴我們沒有找到WebApplicationContext。

我試着調試過這個,發現Wildfly沒有調用init Filter方法,直到Filter接收到第一個要處理的請求。我同意這可能是某些情況下的性能改進,但在我目前的情況下這是一個問題。

有什麼辦法告訴Wildfly在應用程序啓動時初始化過濾器嗎?

謝謝。

+1

這看起來像一個很好的增強,我們可以添加到wildfly /底部,你可以爲此創建jira嗎? https://issues.jboss.org/browse/WFLY – ctomc

+0

好的,所以你說這是不可能的(除非你改變源代碼當然):D所以我會按照你的建議添加一個JIRA。如果你希望你可以添加一個答案,說「這是不可能的,只需填寫一個JIRA」,所以我會將它標記爲正確的答案。謝謝! –

+0

我已經填寫了JIRA,以下鏈接:https://issues.jboss.org/browse/WFLY-3028 –

回答

3

我發送了pull request,它通過承擔子系統中的配置選項公開此功能。

您現在可以添加

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

啓用它。

+0

謝謝!您不僅提供了答案,還提供瞭解決方案。 非常感謝你 –