2

Рассмотрим перехватчик, который помещает объект в Value стека, сделать некоторую логику, а затем удаляет его:Является ли перехватчик Struts 2, который ставит и выдает значение Value Stack в потоковом режиме?

ActionContext.getContext().getValueStack().set("user", CurrentUser); 

doSomeLogic(); 

ActionContext.getContext().getValueStack().pop(); 

Как уже упоминалось в Are Interceptors in Struts2 Thread UNsafe? перехватчики являются поточно, но, как мы имеем дело с Value Stack в коде выше, я если это нормально или мы должны синхронизировать код выше.

Как вторичный вопрос, есть ли лучший способ удалить элемент из Value Stack?

+0

Какова фактическая * точка * удаления ее из стека значений? Стек данных создается для каждого запроса. Оно уходит само собой. –

+0

При просмотре фреймворка struts я обнаруживаю, что всегда struts ставят значения в стеке значений, а self и приложения, считываемые из него. Я вообще не рекомендую, чтобы в приложениях было что-то еще. Вот почему я удалил свою толкаемую ценность. –

ответ

1

Как уже упоминалось в Are Interceptors in Struts2 Thread UNsafe? перехватчики потокобезопасны

перехватчики НЕ поточно; в JAVA, однако способ.

Если вы не использовать static переменные, ни переменные экземпляра, все, инстанцированы внутри метода является поточно, что означает, что несколько потоков, обращающиеся этот метод будет обращаться к нему последовательно, или доступ к нему в новом экземпляре содержащий класс.

Переменные никогда не будут смешанными, и вам не нужно ничего синхронизировать.

Кроме того, ValueStack хранится в ActionContext, то есть ThreadLocal, и, следовательно, определенно в потоковом режиме.


BTW ... почему бы не использовать сеанс для этого? :)

+0

Спасибо и очень долго рассказываем о том, почему мы не можем использовать сеанс;). Можете ли вы, пожалуйста, сообщить мне, что это нормально, чтобы просто выскочить из стека ценностей. есть способ удалить добавленный ключ?! –

+0

TL; DR? : P BTW, да, нормально, чтобы вывести значение из стека, и AFAIK, нет, нет других способов (но я обычно не общаюсь со стеком напрямую, RomanC - ваш парень здесь: D) –