Я пытаюсь отправить 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>
Я пытаюсь сделать следующее:
Я не получаю сообщения об ошибке, но компонент JSF также не обновляется (p: вызов remoteCommand). Есть идеи, как я могу это исправить?
Нет 100% необходимости добавлять Faces Message. Моя основная цель состоит в том, чтобы вошедший в систему пользователь получил обновление (обновление) для определенного элемента со страницы (=> вызовите p: remoteCommand name = "notificationLoadScript") ... event) "является отправляющей стороной? Может быть, небольшая предыстория: у меня есть планировщик в моем бэкэнде. Этот планировщик выполняет действия, такие как создание «объекта-напоминания» в серверной части. Кроме того, он создаст push-уведомление (как вы знаете, например, из Stackoverflow) ...
Нет, это принимающая сторона (то есть push-события). Просто избавьтесь от попыток добавить туда сообщения лиц. Это никогда не сработает. FacesContext # getCurrentInstance () всегда будет возвращать null. Просто потому, что это не инициируется командной кнопкой JSF или около того.
Пожалуйста, Ctrl + F «FacesContext также будет недоступен в указанном выше методе прослушивателя событий». в документации o: socket. Это уже твой ответ. Компонент / метод вообще не вызывается запросом HTTP / JSF. Он вызывается изнутри событием EJB / CDI.
Хорошо, спасибо ... Есть идеи, как я могу затем вызвать p: remoteCommand после того, как я отправлю событие push?
X вашей XY-проблемы расплывчато. Прочтите xyproblem.info и исправьте свой вопрос.
Хорошо, я обновил вопрос
Это действительно не сработает. На этом этапе вообще нет средств для запроса JSF. Почему именно вы хотите добавить сообщения с этими лицами на принимающей стороне? Вы должны в основном добавлять их в отправляющую сторону.