CDI: как уведомить bean-компонент ViewScoped из bean-компонента SessionScoped без активного контекста запроса/представлеJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 CDI: как уведомить bean-компонент ViewScoped из bean-компонента SessionScoped без активного контекста запроса/представле

Сообщение Anonymous »

У меня есть приложение/сервис Quarkus + Camel + Primefaces, который получает сообщения от AMQ Artemis. Принимающим компонентом является ApplicationScopped, и он также повторно отправляет определенные события определенным SessionBean(ам).
Я вручную свернул SessionBeanRegistry (также ApplicationScoped), и Session bean(ы) саморегистрируются путем добавления ссылки на список прослушивателей в SessionBeanRegistry (который вводится в Session bean(ы)) и самостоятельно отменяется регистрация в его методах PostCostruct и PreDestroy. SessionBeanRegistry внедряется в другой компонент ApplicationScoped, который получает сообщения от AMQ, а затем сообщение пересылается в сеансовые компоненты с использованием ссылок, хранящихся в SessionBeanRegistry.
Существует ли хороший/стандартный способ пересылки некоторых событий из SessionBean в активные в данный момент связанные компоненты ViewScoped? Вся пересылка (маршрут Camel -> ApplicationScoped -> SessionScoped -> ViewScoped) происходит в одном и том же потоке без активного контекста запроса и без использования каких-либо реактивных компонентов.
То, что я пробовал до сих пор, но безуспешно (прослушиватель bean-компонента ViewScoped никогда не вызывается):
  • добавлена аннотация @ActivateRequestContext к методу наблюдателя bean-компонента ApplicationScoped (вызываемому процессором Camel по сообщению). поступление из AMQ) и запуск события, предназначенного для bean-компонентов ViewScoped оттуда.
  • пытался заставить bean-компонент ViewScoped самостоятельно регистрироваться в качестве прослушивателя bean-компонента SessionScoped, используя ссылку на объект. Часть регистрации работает, но я не могу вызвать bean-компонент ViewScoped по ссылке из-за «jakarta.enterprise.context.ContextNotActiveException: контекст ViewScoped не был активен при попытке получить экземпляр bean-компонента для клиентского прокси-компонента CLASS». Аннотирование метода ввода с помощью @ActivateRequestContext не помогает.
Это допустимый/поддерживаемый вариант использования? Есть какие-нибудь указания, как заставить его работать?
ОБНОВЛЕНИЕ: Отказ от этого подхода в пользу «стандартного» способа сделать то же самое - получить сообщение от сеансового bean-компонента в View/UI и вызвать соответствующий/связанный bean-компонент ViewScoped с использованием JavaScript. Итак, это тот же результат, но с другой стороны, и https://showcase.omnifaces.org/push/socket делает это довольно просто.

Подробнее здесь: https://stackoverflow.com/questions/798 ... ive-reques
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»