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