2015-09-29 40 views
2

我目前正在開發基於RESTeasy的RESTful服務。我有一個過濾器類,用作服務器請求過濾器以及服務器響應過濾器(即它實現ContainerRequestFilterContainerResponseFilter接口)。在基於RestEasy的服務中爲ThreadLocal存儲使用服務器請求和響應過濾器

在請求開始時,我使用過濾器將對象放入ThreadLocal。該對象在整個請求中由資源使用。在請求結束時,在發送響應之前,過濾器從ThreadLocal中刪除對象。

我的問題是,有沒有保證請求過濾器,資源和響應過濾器都將在同一個線程中執行?在請求過濾器將對象放入ThreadLocal後,有不同的線程執行請求(從而無法訪問對象)嗎?

我確信是這樣,但後來我看到這http://jersey.576304.n2.nabble.com/Does-filter-method-of-ContainerRequestFilter-run-in-resource-method-thread-td7582648.html(官方澤西島論壇),現在我有疑慮。

+0

關於異步處理的球衣論壇的評論/鏈接:異步處理意味着客戶立即得到響應,不是嗎? - 但這並不意味着首先處理客戶端請求的servlet容器線程在發送客戶端響應之後會發生變化。如果這是真的,那麼ThreadLocal可以用於你的目的,這對我來說是一個指標。 –

回答

0

javax.ws.rs.container.ContainerRequestContext.setProperty(...)

javax.ws.rs.container.ContainerRequestContext.getProperty(... )

可能是正確的做法。 javadoc狀態:

在Servlet容器中,屬性與ServletRequest同步並公開ServletRequest中可用的所有屬性。這些屬性的任何修改都會反映在關聯的ServletRequest的屬性集中。

相關問題