powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java global events
11 сообщений из 11, страница 1 из 1
Java global events
    #38502124
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго всем дня,

Кратко расскажу про ситуацию. Мы используем в проекте стандартные JavaEE Events и Observers (CDI) - схема как обычно, кто-то бросает event, и методы observers ловят этот event - управляется контейнером.
Но дело в том, что эти event'ы не глобальные. Т.е. все функционирует только в рамках конкретной http сессии. Например у нас есть event ConfigurationChangedEvent. Подразумевается, что он выбрасывается при изменении конфигурации пользователем администратором. И подразумевалось, что этот event будет пойман всеми авторизованными пользователями (сессиями) и каждая сессия перезагрузит у себя конфигурацию. Но в итоге работает не так, в результате только одна сессия будет оповещена - та, которая этот event и бросила.
Мне понятно почему так происходит, и даже понятно, как обойти.
Но вопрос у меня таков - посоветует ли кто-нибудь что-нибудь реализованное в этой области? Может в Spring? Нужно именно чтобы можно было оповещать всех пользователей из одного места.

Спасибо!
...
Рейтинг: 0 / 0
Java global events
    #38502145
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ApplicationScoped/SessionScoped ? Возможно событие создаётся в неком SessionScoped бине?
...
Рейтинг: 0 / 0
Java global events
    #38502160
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczApplicationScoped/SessionScoped ? Возможно событие создаётся в неком SessionScoped бине?

Не важно, в каком бине создается событие и в каком ловится. Это может быть ApplicationScoped, SessionScoped, хоть RequestScoped. Поймано оно будет всеми зарегистрированными слушателями но только в этой же сессии. А хотелось бы оповещать все сессии.
...
Рейтинг: 0 / 0
Java global events
    #38502175
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё. Понял. Там ведь не может быть никакого глобального события, так как эти события всех обрабатываются синхронно, то есть в потоке текущего Request. Даже не Session scope выходит.

http://blog.akquinet.de/2012/02/28/extending-cdi-observer-pattern-to-support-global-events/
...
Рейтинг: 0 / 0
Java global events
    #38502190
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Да, все верно) Я уже читал эту статью, но что-то мне не очень по душе такой кустарный подход. И еще, я тут подумал, если у меня будет 5000 открытых сессий, это получается надо каждую информировать - не слишком ли большая нагрузка? Сдается мне что не зря CDI не поддерживают глобальные event'ы...
Хотелось бы какое-нибудь готовое решение. В Spring есть что-нибудь подходящее?
...
Рейтинг: 0 / 0
Java global events
    #38502196
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем вам Spring если у вас всё завязано на CDI? Можно через JMS сделать. Но в любом случае, если нужно обновлять именно HttpSession, то их нужно руками регистрировать.
...
Рейтинг: 0 / 0
Java global events
    #38502200
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterДа, все верно) Я уже читал эту статью, но что-то мне не очень по душе такой кустарный подход. И еще, я тут подумал, если у меня будет 5000 открытых сессий, это получается надо каждую информировать - не слишком ли большая нагрузка?
Не понятно что вкладывается в понятие "информировать сессию". Обновить какой-то атрибут в 5К HttpSession по-моему фигня, если единоразово. А вот послать при этом что-то всем клинтам, уже отдельная песня.

rabiterСдается мне что не зря CDI не поддерживают глобальные event'ы...

Потому что CDI события синхронны.
Вот тут ещё описаны альтернативные решения
http://piotrnowicki.com/2013/05/asynchronous-cdi-events/

rabiterХотелось бы какое-нибудь готовое решение. В Spring есть что-нибудь подходящее?
Сложно сказать, не понимая что именно требуется.
...
Рейтинг: 0 / 0
Java global events
    #38502203
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Через JMS слишком большой геморрой. Наверное придется самому сделать что-нибудь вроде того, как предложено в статье.
Спасибо :)
...
Рейтинг: 0 / 0
Java global events
    #38502222
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНе понятно что вкладывается в понятие "информировать сессию". Обновить какой-то атрибут в 5К HttpSession по-моему фигня, если единоразово.

Я имел ввиду информировать сессию сугубо на сервере. Например: одна сессия бросает event, который ловят 4 слушателя. Т.е. в каждой сессии 4 слушателя должны будут получить этот event. Я просто немного задумался о масштабе действий по одному чиху: в случае 5К сессий получается что 4*5000 слушателей будут информированы. Хотя, если события будут бросаться не часто, то все будет ок.

Спасибо за ссылку на "Asynchronous CDI Events"
...
Рейтинг: 0 / 0
Java global events
    #38502224
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rabiterЯ имел ввиду информировать сессию сугубо на сервере.

Нельзя "информировать сессию".
Сессия на сервере это некоторое состояние связанное с id сессии. Это состояние можно изменить.
...
Рейтинг: 0 / 0
Java global events
    #38502237
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrabiterЯ имел ввиду информировать сессию сугубо на сервере.

Нельзя "информировать сессию".
Сессия на сервере это некоторое состояние связанное с id сессии. Это состояние можно изменить.

Ок, согласен, я несколько неточно выразился. Но я думал что смысл будет ясен. Собственно, моя проблема в точности описана в ссылке, что вы прислали
http://blog.akquinet.de/2012/02/28/extending-cdi-observer-pattern-to-support-global-events/
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java global events
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]