Я вручную свернул 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
Мобильная версия