Насколько я знаю, в спецификации Servlet 3 появилась функция асинхронной обработки.Помимо прочего, это будет означать, что один и тот же поток может и будет использоваться повторно для обработки другого параллельного HTTP-запроса (запросов).Это не революционно, по крайней мере для людей, которые раньше работали с NIO.
В любом случае, это приводит к еще одной важной вещи: нет ThreadLocal
переменных как временное хранилище для данных запроса,Поскольку, если один и тот же поток внезапно становится потоком-носителем для другого HTTP-запроса, локальные данные запроса будут переданы другому запросу.
Все это - мое чистое предположение, основанное на чтении статей, я не получилвремя играть с любыми реализациями Servlet 3 (Tomcat 7, GlassFish 3.0.X и т. д.).
Итак, вопросы:
- Правильно ли предположить, что
ThreadLocal
перестанет быть удобным взломом для хранения данных запроса? - Кто-нибудь играл с какой-либо из реализаций Servlet 3 и пытался использовать
ThreadLocal
s, чтобы доказать вышеизложенное? - Помимо хранения данныхВ HTTP-сеансе есть ли другие подобные легкодоступные хаки, которые вы могли бы посоветовать?
РЕДАКТИРОВАТЬ: не поймите меня неправильно.Я полностью понимаю опасности и хакерство ThreadLocal
.На самом деле, я всегда советую не использовать его в аналогичном контексте.Однако, хотите верьте, хотите нет, контекст потока использовался гораздо чаще, чем вы, возможно, представляете.Хорошим примером может служить Spring OpenSessionInViewFilter
, который, согласно его Javadoc:
Этот фильтр делает сеансы Hibernate доступными через текущий поток, который будет автоматически определяться менеджерами транзакций.
Это не строго ThreadLocal
(еще не проверил источник), но уже звучит тревожно.Я могу думать о более похожих сценариях, и обилие веб-фреймворков делает это гораздо более вероятным.
Короче говоря, многие люди строили свои песочные замки на вершине этого хака, с осознанием или без него.Поэтому ответ Стивена понятен, но не совсем то, что я ищу.Я хотел бы получить подтверждение того, действительно ли кто-либо пытался и смог воспроизвести некорректное поведение, поэтому этот вопрос можно использовать в качестве ориентира для других людей, попавших в ловушку той же проблемы.