ScopeType в JBoss Seam

У каждого Seam-компонента есть Scope – контекст применения (хранения, использования). Например, есть такой Scope: SESSION – это означает, что компонент будет храниться и получаться из сессии пользователя. То есть получается практически полный аналог сессионных объектов (HttpSession.getAttribute и HttpSession.setAttribute). Также Seam предоставляет еще несколько ScopeType:)

Типы ScopeType (компоненты отсортированы по уменьшению области применения, вначале идут самы глобальны контексты):
  • APPLICATION - компонент создается и храниться в рамках всего приложения, практически аналог глобальны переменных приложения. Это надо чтобы компонент был гарантированно один для всех пользователей.
  • BUSINESS_PROCESS – компонент создается и храниться в бизнес процессе. Это нужно для хранения компонентов в контексте выполнения бизнес процесса (BEPL и все такое).
  • SESSION – компонент создается и храниться в сессии пользователя (альтернатива HttpSession). Например для сохранения текущего пользователя (механизм безопасности и проверки прав) рекомендуется использовать этот контекст. Также можно в нем хранить настройки текущего сеанса пользователя.
  • CONVERSATION – компонент создается и храниться в группе взаимодействии пользователя с сервером, то есть для одной группы взаимодействий может быть проставлено в соответствие несколько запросов на сервер. Применяется эта штука в мастерах, когда у нас есть ряд запросов на сервер для совершения определенного действия.
  • EVENT – компонент создается и храниться во взаимодействии пользователя с сервером (альтернатива HttpRequest), причем создается на одно взаимодействие. Где его использовать вытекает из его названия, например, если вы делаете запрос на сервер, то было бы неплохо иметь один и тот же объект на один запрос (request).
  • PAGE – компонент создается и храниться с привязкой к странице (компонент для страницы). Я так понял что используется этот тип если вам нужно изолировать компонент в пределах одной страницы (при запросе на сервер может быть использовано несколько страниц).
  • STATELESS – компонент создается, используется и сразу удаляется (без сохранения состояния). Это надо чтобы один раз использовать компонент и в следующий раз гарантированно получить новый (похоже на паттерн “команда”).
Замечания:
  • BUSINESS_PROCESS – я не использовал, поэтому до конца не представляю его необходимость.
  • PAGE - я не понял хранятся ли состояния при обновлении страницы.
Вроде все, для дополнительной информации читаем здесь.