Использование фильтров запросов и ответов сервера для хранилища ThreadLocal в службе RestEasy

В настоящее время я работаю над сервисом RESTeasy на основе RESTful. У меня есть класс фильтра, который служит фильтром запроса сервера, а также фильтром ответа сервера (т.е. он реализует ContainerRequestFilter а также ContainerResponseFilter интерфейсы).

В начале запроса я использую фильтр, чтобы поместить объект в ThreadLocal, Этот объект используется ресурсами на протяжении всего запроса. В конце запроса, перед отправкой ответа, фильтр удаляет объект из ThreadLocal,

У меня вопрос, есть ли гарантия, что фильтр запроса, ресурс и фильтр ответа будут выполняться в одном потоке? Есть ли вероятность, что после фильтра запросов объект помещается в ThreadLocal, другой поток будет выполнять запрос (и, следовательно, не иметь доступа к объекту)?

Я был уверен, что это так, но потом я увидел это http://jersey.576304.n2.nabble.com/Does-filter-method-of-ContainerRequestFilter-run-in-resource-method-thread-td7582648.html (официальный форум Джерси) и теперь у меня есть сомнения.

1 ответ

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

а также

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

вероятно, правильный подход. Javadoc утверждает:

В контейнере Servlet свойства синхронизируются с ServletRequest и предоставляют все атрибуты, доступные в ServletRequest. Любые изменения свойств также отражаются в наборе свойств связанного запроса ServletRequest.

Другие вопросы по тегам