O: сокет в классе EJB - я получаю NPE в org.omnifaces.util.Messages

Я пытаюсь отправить push-уведомление из моего класса EJB:

@Stateless
public class SendEmailNotificationReminderServiceBean implements SendEmailNotificationReminderService {

    @Inject
    private BeanManager beanManager;

private void sendNotification {
        // Push Nachricht
        PushEvent event = new PushEvent("sendNotification", 1);
        beanManager.fireEvent(event);
}

}

Вот моя розетка:

    @Named
@ApplicationScoped
public class NotificationSocket implements Serializable {

    private static final long serialVersionUID = 7615791377170410627L;

    @Inject
    @Push(channel = "notificationChannel")
    private PushContext push;


    /**
     * Push Notification
     * 
     * @param recipientUser
     */
    public void pushUser(@Observes PushEvent event) {

        if (event == null)
            return;

        Set<Future<Void>> sent = push.send(event.getMessage(), event.getUserId());

    }

}

Мой объект:

public class PushEvent {

    private String message;
    private Long userId;

    public PushEvent(String message) {
        super();
        this.message = message;
    }

    //////////////

    public PushEvent(String message, Long userId) {
        super();
        this.message = message;
        this.userId = userId;
    }

    public String getMessage() {
        return message;
    }

    public Long getUserId() {
        return userId;
    }

}

Моя страница JSF:

<o:socket channel = "notificationChannel"
        user = "#{loginBean.currentEmployee.id}" scope = "session"
        onmessage = "notificationLoadScript">
    </o:socket>

    <h:form id = "notificationPushTopbarForm">
        <p:remoteCommand name = "notificationLoadScript"
            actionListener = "#{topbarMenuController.loadNotification()}"
            oncomplete = "changeTitleForNotification(#{topbarMenuController.numberOfNewNotificationAvailable})"
            update = ":notificationLink, :notificationSidebarForm" global = "false" />
    </h:form>

Я пытаюсь сделать следующее:

  • Создайте PushNotification из моего бэкэнда (уровень EJB) для текущего пользователя, вошедшего в систему, и этого канала. В качестве примера вы можете представить значок уведомления (правый угол) из Stackoverflow.

Я не получаю сообщения об ошибке, но компонент JSF также не обновляется (p: вызов remoteCommand). Есть идеи, как я могу это исправить?

Это действительно не сработает. На этом этапе вообще нет средств для запроса JSF. Почему именно вы хотите добавить сообщения с этими лицами на принимающей стороне? Вы должны в основном добавлять их в отправляющую сторону.

BalusC 30.03.2021 21:14

Нет 100% необходимости добавлять Faces Message. Моя основная цель состоит в том, чтобы вошедший в систему пользователь получил обновление (обновление) для определенного элемента со страницы (=> вызовите p: remoteCommand name = "notificationLoadScript") ... event) "является отправляющей стороной? Может быть, небольшая предыстория: у меня есть планировщик в моем бэкэнде. Этот планировщик выполняет действия, такие как создание «объекта-напоминания» в серверной части. Кроме того, он создаст push-уведомление (как вы знаете, например, из Stackoverflow) ...

vished2000 30.03.2021 21:23

Нет, это принимающая сторона (то есть push-события). Просто избавьтесь от попыток добавить туда сообщения лиц. Это никогда не сработает. FacesContext # getCurrentInstance () всегда будет возвращать null. Просто потому, что это не инициируется командной кнопкой JSF или около того.

BalusC 30.03.2021 21:24

Пожалуйста, Ctrl + F «FacesContext также будет недоступен в указанном выше методе прослушивателя событий». в документации o: socket. Это уже твой ответ. Компонент / метод вообще не вызывается запросом HTTP / JSF. Он вызывается изнутри событием EJB / CDI.

BalusC 30.03.2021 21:26

Хорошо, спасибо ... Есть идеи, как я могу затем вызвать p: remoteCommand после того, как я отправлю событие push?

vished2000 30.03.2021 21:28

X вашей XY-проблемы расплывчато. Прочтите xyproblem.info и исправьте свой вопрос.

BalusC 30.03.2021 21:28

Хорошо, я обновил вопрос

vished2000 30.03.2021 21:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
12
0

Другие вопросы по теме