Почему мы должны сделать поток ManagedBean SessionScoped безопасным в JSF?

Я знаю, что Application-Scope сохраняется для нескольких пользователей, поэтому очевидно, что мы должны убедиться, что все управляемые компоненты ApplicationScoped являются потокобезопасными.

Я также понимаю, что нам не нужно заботиться о безопасности потоков для RequestScoped ManagedBean. Это потому, что он длится только для одного HTTP-запроса и заново создается для каждого запроса, если на него ссылаются.

Но я не совсем уверен, почему мы должны беспокоиться о безопасности потоков для ManangedBean SessionScoped. Несмотря на то, что он сохраняется в нескольких запросах, каждый отдельный пользователь получает его/ее собственный экземпляр, верно?

Итак, почему нам нужно беспокоиться о безопасности потоков в случае SessionScoped ManagedBeand, и применимо ли это также к ViewScoped ManagedBean? ViewScope сохраняется при двух последовательных запросах одного и того же представления, верно?


person Bhesh Gurung    schedule 15.05.2011    source источник


Ответы (1)


Если вы уже беспокоитесь о потокобезопасности данных в определенной области, то данные, скорее всего, относятся к более узкой области (т. е. в дизайне высокого уровня есть недостаток). Если данные помещены в правильную область, то нет абсолютно никаких причин беспокоиться о безопасности потоков. Я предполагаю, что ваши bean-компоненты спроектированы правильно и не выполняют никакой бизнес-логики в геттеры.

Используйте область приложения для общих данных/констант приложения, таких как выпадающие списки, которые одинаковы для всех. Используйте область сеанса для конкретных данных клиента, таких как вошедший в систему пользователь и пользовательские настройки (язык и т. д.). Используйте область просмотра для расширенных динамических представлений с поддержкой ajax (проверка на основе ajax, рендеринг и т. д.). Используйте область запроса для простых и не-ajax форм/презентаций.

person BalusC    schedule 16.05.2011
comment
Я читал учебник Oracle по JavaEE6, и там говорится, что при использовании управляемых компонентов ApplicationScoped и SessionScoped следует принимать меры предосторожности для обеспечения безопасности потоков, и мне было интересно, в каком смысле? Но, теперь ясно. Хорошее объяснение. Спасибо. - person Bhesh Gurung; 16.05.2011