CDI Push NullPointerException while Injecting pushEvent
buraq Jan 31, 2012 7:12 PMHi,
I'm trying to get a4j:push working with CDI events on 4.1.0.Final.
My environment;
Netbeans 7.0.1
Tomcat 7.0.14.0
Mojarra 2.0.2
RichFaces 4.1.0
PrimeFaces 2.2.1
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <context-param> <param-name>javax.faces.FACELETS_SKIP_COMMENTS</param-name> <param-value>true</param-value> </context-param> <context-param> <param-name>org.richfaces.push.jms.disable</param-name> <param-value>true</param-value> </context-param> <filter> <filter-name>PushFilter</filter-name> <filter-class>org.richfaces.webapp.PushFilter</filter-class> </filter> <filter-mapping> <filter-name>PushFilter</filter-name> <servlet-name>Faces Servlet</servlet-name> </filter-mapping> <context-param> <param-name>com.sun.faces.expressionFactory</param-name> <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> </context-param> <listener> <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class> </listener> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern> <url-pattern>*.xhtml</url-pattern> <url-pattern>*.go</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>login.xhtml</welcome-file> </welcome-file-list> <error-page> <exception-type>javax.faces.application.ViewExpiredException</exception-type> <location>/login.xhtml</location> </error-page> </web-app>
producer.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <ui:composition xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html" xmlns:ui="http://java.sun.com/jsf/facelets" xmlns:f="http://java.sun.com/jsf/core" xmlns:p="http://primefaces.prime.com.tr/ui" xmlns:fn="http://java.sun.com/jsp/jstl/functions" template="menu.xhtml"> <ui:define name="pageContent"> <f:view contentType="text/html" > <br/> <h:form id="mf" prependId="false"> <p:panel> <p:commandButton value="PUSH" actionListener="#{myManagedBean.push}"/> </p:panel> </h:form> </f:view> </ui:define> </ui:composition>
consumer.xhtml
<a4j:push address="#{myManagedBean.userIdentifier}@pushCdi" ondataavailable="jQuery('<li />').prependTo('#messages').text(event.rf.data)" /> <ul id="messages" />
MyManagedBean.java
import javax.annotation.PostConstruct; import javax.faces.bean.ViewScoped; import javax.enterprise.event.Event; import javax.faces.bean.ManagedBean; import javax.faces.context.FacesContext; import javax.inject.Inject; import org.richfaces.cdi.push.Push; @ManagedBean @ViewScoped public class MyManagedBean extends BaseBean implements java.io.Serializable{ private static final long serialVersionUID = 1L; public static final String PUSH_CDI_TOPIC = "pushCdi"; private String userIdentifier; private String message; @Inject @Push(topic = PUSH_CDI_TOPIC, subtopic = "#{myManagedBean.userIdentifier}") Event<String> pushEvent; @PostConstruct public void initialize() { super.initBean(); if (userIdentifier == null) { userIdentifier = sessionUser.getId(); } } public synchronized void push() throws Exception { pushEvent.fire("PushTest"); } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Event<String> getPushEvent() { return pushEvent; } public void setPushEvent(Event<String> pushEvent) { this.pushEvent = pushEvent; } public String getUserIdentifier() { return userIdentifier; } public void setUserIdentifier(String userIdentifier) { this.userIdentifier = userIdentifier; } }
When I click the "PUSH" button in my producer.xhtml I'm getting java.lang.NullPointerException at "pushEvent.fire("PushTest");" line. Is there a problem when using @Inject ?
Thanks,
Buraq