Scope объясните пожалуйста на пальцах некоторых вещи

20 views
Skip to first unread message

maratische

unread,
Dec 17, 2008, 10:57:51 AM12/17/08
to The Russia JBoss Seam user group
Коллеги разъясните пожалуйста некоторые вещи в JBoss Seam
мы как всегда изучаем Framework по живому проекту, те не имея времени
пописать небольшие приблуды и набраться опыту и вообще не имея
времени.

В какие случаях стоит использовать Scope=ScopeType.SESSION, когда
Event, CONVERSATION etc...

Например у меня есть небольшой проект, например каталог товаров.
Основной пользовательский интерфейс находится в home.xhtml

в нем отображаются каталоги, товары в зависимости от выбранного
каталога и прочая информация
Для этого используются несколько Action, которые все имеют следующий
тип:
@Name("resultMessages") @Scope(ScopeType.SESSION) @Restrict("#
{identity.loggedIn}")

в результате очень удобно работать, так как объект получается в
сессии, то я спокойно имеют переменные типа
private Folder selectedFolder
private Good selectedGood
(с сооветствующими set/get)
и тд,
С этими переменные дергаются с всевозможных xhtml страниц, оттуда же
достаются коллекции товаров/пользователей и все кажется шоколадным.

Но у меня складывается четкое впечатление, что я все дальше и дальше
ухожу в неправильном направлении и все Action, которые выполняют
действия, должны иметь другой тип ( Event/CONVERSATION/etc) А в сессии
должны храниться только значения.

Стал получать часто разнообразные ошибки связанные с потерей сессии,
при большом количестве запросов AJAX запросов от пользователя к
серверу.


ps: что такое документация и где ее брать я знаю, и даже ее читаю.

Greg

unread,
Dec 17, 2008, 11:45:35 AM12/17/08
to The Russia JBoss Seam user group
в целом если я правильно улавливаю(надеюсь другие поправят если что)
мысль Scope, то это как раз попытка уйти от типа Session. Например
если юзается только одна страница и на ней происходят разные action то
лучше юзать Page, а вот если страниц много и нужно хранить состояния
то conversation. Как то так... Вообще если много юзать тип Session то
отъедается много памяти, для простых вещей это не целесообразно.
От себя хочу добавить, что на практике не сразу получается уловить где
и что использовать, не очень прозрачно всё в доки написанно. По поводу
ajax это скорей всего проблема не в Scope, а в управлении запросами,
где-то в доке по Richfaces очень не плохо про это написанно(где точно
не помню).

Sergey Kiselev

unread,
Dec 17, 2008, 10:44:10 PM12/17/08
to the-russia-jboss...@googlegroups.com
Есть следующие типы ScopeType:
  • EVENT - компонент создается и храниться во взаимодействии пользователя с сервером, причем создается на одно взаимодействие. Где его использовать вытекает из его названия, например, если вы делаете запрос на сервер, то было бы неплохо иметь один и тот же объект на один запрос (request).
  • PAGE - компонент создается и храниться с привязкой к странице. Я так понял что используется этот тип если вам нужно изолировать компонент в пределах одной страницы (при запросе на сервер может быть использованно несколько страниц).
  • CONVERSATION - компонент создается и храниться в группе взаимодействии пользователя с сервером, то есть для одной группы взаимодействий может быть проставлено в соотвествие несколько запросов на сервер. Применяется эта штука в мастерах, когда у нас есть ряд запросов на сервер для совершения определенного действия. Этим типом взаимодействий разработчики Seam гордяться:)
  • SESSION - компонет создается и храниться в сессии пользователя. Например для сохранения текущего пользователя (механизм безопасности и проверки прав) рекомендуется использовать этот контекст.
  • BUSINESS_PROCESS - компонет создается и храниться в бизнес процесе, что это я не знаю. Пока не использовал, но судя по названию и описанию это нужно для хранения компонетов в контексте выполения бизнес процеса (BEPL и все такое).
  • APPLICATION - компонет создается и храниться в рамках всего приложения, практически аналог глобальны переменных приложения. Это надо чтобы компонет был гарантированно один для всех пользователей. Я не рекомендую использовать данный контекст:)
  • STATELESS - компонет создается, используется и сразу удаляется. Это надо чтобы один раз использовать компонет и в следующий раз гарантированно получить новый (похоже на паттерн "команда").
Для подробностей читаем http://docs.jboss.org/seam/2.1.0.SP1/api/org/jboss/seam/ScopeType.html и http://google.com :)

--
С уважением
Киселев Сергей Сергеевич
e-mail: in...@intr13.ru, kis...@gmail.com
www: intr13.ru
blog: intr13.ru
ICQ: 391738820
Skype: intr13
Reply all
Reply to author
Forward
0 new messages