События CDI, сфера их распространения - PullRequest
4 голосов
/ 26 июля 2011

Вот повторяющаяся проблема, и я думаю, что, возможно, события CDI могут помочь мне, но я не уверен.

У меня есть два пользователя, взаимодействующих на веб-сайте, я хочу, чтобы они поделились экземпляромбоб, чтобы они оба могли делиться деятельностью.Пока что единственный способ, которым я знаю, как это сделать, это отправить данные в базу данных, а затем иметь два разных bean-компонента, по одному для каждого пользователя, непрерывно проверять наличие изменений.

Мой вопрос заключается в том, наблюдает ли bean-объект сессионной областисобытие, каждый ли сеанс каждого пользователя получает уведомление, когда я его запускаю?Или только сессионный компонент для активного пользователя?Потому что тогда я мог бы использовать наблюдателя, чтобы синхронизировать объект для обоих пользователей.Однако я на самом деле не думаю, что это так, потому что если у меня будет тысяча сеансов, запускающих событие, это вызовет 1000 вызовов методов ...

Моим другим решением было бы огромный объектный компонент, которыйсодержит объект активности для обоих пользователей, и любые изменения, внесенные в него, могут быть переданы пользователям, но я все еще должен сканировать этот объект, я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Вы не получите его бесплатно таким образом, потому что, когда событие запускается, один и только один сеанс активен для текущего потока, и фактический объект, для которого вызывается метод наблюдателя [если не является статическим], получается из активного контекста.

1 голос
/ 15 марта 2013

Вы можете решить эту проблему, имея компонент @ApplicationScoped, который все сеансы могут видеть и использовать в качестве «кэша».Любой сеанс может вызвать событие, и компонент @ApplicationScoped может @Observe его, и вы можете вставить ссылку на этот компонент в свой пользовательский компонент @SessionScoped.Поскольку @ApplicationScoped технически доступен всем зарегистрированным пользователям CurrentContext, он может получать события из любого сеанса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...