PrimeFaces Push EventBusFactory.getDefault().eventBus() возвращает null

У меня проблема с отправкой PrimeFaces 6.0, я искал здесь все вопросы, и ни один ответ мне не помог. Я создаю внутреннюю систему электронной почты и пытаюсь уведомить пользователя, если у него есть новое электронное письмо, вставленное в БД, на основе внутреннего события (шаблон наблюдателя), вот мой код:

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app
private final static String CHANNEL = "/notify";
.
.
.
private void notifyView(NewEmailEvent evt) {
    String CurrentUser = this.currentUser.getEmailID();
    String EventUserId = evt.getUserID();
    if (CurrentUser.equalsIgnoreCase(EventUserId)) {
    EventBus eventBus = EventBusFactory.getDefault().eventBus();
    eventBus.publish(CHANNEL, 
    new FacesMessage("New Mail", "You have new Mail"));
    }

}
1.xsd" version="3.1"> <display-name>Test Foo Email system</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <!-- primeFaces push declaration --> <servlet> <servlet-name>Push Servlet</servlet-name> <servlet-class>org.primefaces.push.PushServlet</servlet-class> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>Push Servlet</servlet-name> <url-pattern>/primepush/ *</url-pattern> </servlet-mapping> <!-- Ends here--> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/ *</url-pattern> </servlet-mapping> <context-param> <description>State saving method: 'client' or 'server' (=default). See JSF Specification 2.5.2</description> <param-name>javax.faces.STATE_SAVING_METHOD</param-name> <param-value>client</param-value> </context-param> <context-param> <param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name> <param-value>resources.application</param-value> </context-param> <listener> <listener-class>com.sun.faces.config.ConfigureListener</listener-class> </listener> </web-app>

Пример кода моей страницы foo.xhtml

<script type="text/javascript">
    function handleMessage(facesmessage) {
        facesmessage.severity = 'info';

        PF('growl').show([facesmessage]);
    }
</script>
<div class="New_Message_container ">
            <!-- primefaces Push component -->
             <p:growl widgetVar="growl" showDetail="true" />
            <p:socket onMessage="handleMessage" channel="/notify" />
            </div>

Класс контроллера:

private final static String CHANNEL = "/notify";
.
.
.
private void notifyView(NewEmailEvent evt) {
    String CurrentUser = this.currentUser.getEmailID();
    String EventUserId = evt.getUserID();
    if (CurrentUser.equalsIgnoreCase(EventUserId)) {
    EventBus eventBus = EventBusFactory.getDefault().eventBus();
    eventBus.publish(CHANNEL, 
    new FacesMessage("New Mail", "You have new Mail"));
    }

}

Класс NotifyResource

import javax.faces.application.FacesMessage;
import org.primefaces.push.annotation.OnMessage;
import org.primefaces.push.annotation.PushEndpoint;
import org.primefaces.push.impl.JSONEncoder;

@PushEndpoint("/notify")
  public class NotifyResource {

@OnMessage(encoders = {JSONEncoder.class})
  public FacesMessage onMessage(FacesMessage message) {
        return message;
   }

}

Включены необходимые библиотеки, которые, как я обнаружил, необходимы для этого кода, я загрузил эти банки из Интернета, которые используются в моем образце.

atmosphere-annotations-2.4.9.jar
atmosphere-compat-jbossweb-2.0.1.jar
atmosphere-compat-tomcat-2.0.1.jar
atmosphere-compat-tomcat7-2.0.1.jar
atmosphere-runtime-2.4.9.jar
primefaces-6.0.jar
slf4j-api-1.7.22.jar
slf4j-simple-1.7.22.jar

Я устал отлаживать свой код и заметил, что шина событий становится NULL, когда я пытаюсь ее использовать (eventBus.publish()), поэтому я получил java .lang.NullPointerException.


person Omar Adel    schedule 10.01.2017    source источник
comment
Несколько «дубликатов» в Stackoverflow. Пожалуйста, попробуйте найти их. В столбце «Связанные» справа уже показаны некоторые из них.   -  person Kukeltje    schedule 10.01.2017
comment
Привет, kukeltje, спасибо за ваш комментарий, к сожалению, я перепробовал все опубликованные ответы, но не смог понять, где проблема, которую я ищу для этой проблемы. Уже неделя, я тоже новичок в jsf.   -  person Omar Adel    schedule 10.01.2017
comment
Что такое время работы сервера? Кот? Пробовал добавить cdi в качестве библиотеки   -  person Kukeltje    schedule 10.01.2017


Ответы (1)


<servlet-mapping>
    <servlet-name>Push Servlet</servlet-name>
    <url-pattern>/primepush/ *</url-pattern>
</servlet-mapping>

Между /primepush/ и * есть пробел, попробуйте его убрать.

person FkJ    schedule 04.09.2017