@ Наблюдает в сессионной области? - PullRequest
2 голосов
/ 29 июня 2011

Возможен ли следующий сценарий?

"SessionService", который является EJB без сохранения состояния, запускает событие "LoggedInEvent". Вызывается компонент SessionScoped (Weld) SessionBean, имеющий нестатический метод, наблюдающий за LoggedInEvent, и инициализирует некоторые вещи для этого конкретного пользователя.

Вызывается ли правильный экземпляр "SessionBean"? Все экземпляры называются? Я не могу найти ничего в документации.

1 Ответ

6 голосов
/ 29 июня 2011

«Правильный экземпляр» - вводящая в заблуждение формулировка.

Что происходит так:

  1. SessionService вызывается (возможно, вызвано веб-запросом).
  2. Если запускается LoggedInEvent, все зарегистрированные наблюдатели вызываются синхронно (это означает, что SessionService не завершится до завершения всех наблюдателей).
  3. Каждый компонент, содержащий (не-static) метод наблюдателя будет создан (при условии, что область действия компонента активна - как правило, в стандартной веб-среде (*)).Это будет случай для вашего SessionBean.Если - и только если - SessionBean уже был создан в вашем активном сеансе (безусловно, только один сеанс активен в отношении веб-запроса), то этот экземпляр, конечно, будет использоваться.

Подробнее в spec .

Итак, чтобы ответить на ваш вопрос:

Да, будет вызван правильный экземпляр.Зачем?Поскольку контейнер обязан убедиться, что только один SessionBean -экземпляр связан с активной областью сеанса.

(*): если вызов, например, инициируется удаленным вызовом ejb, выне может ни принять активный сеанс, ни активный разговор ...

...