2015-09-29 33 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的属性集中。

相关问题