Notificação usando o Primefaces Push

Java

14/05/2021

Estou desenvolvendo uma aplicação Primefaces Push e recebo essa mensagem de erro: "GRAVE: java.lang.NullPointerException".

Essa linha "eventBus.publish(CHANNEL, new FacesMessage(StringEscapeUtils.escapeHtml(summary), StringEscapeUtils.escapeHtml(detail)));" está retornando como NULL.

Como poderia solucionar esse erro?

Segue o código:

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

/**
*
* @author Antonio Alves de Lima Filho
*/

@PushEndpoint("/notify")
public class NotifyResource {
	@OnMessage(encoders = (JSONEncoder.class))
	public FacesMessage onMessage(FacesMessage message) {
		return message;
	}
}

import java.util.List;
import br.com.dentalweb.model.Notificacao;

/**
*
* @author Antonio Alves de Lima Filho
*/

public interface NotificacaoDao {
	public void grava(Notificacao notificacao);
	public void remove(Notificacao notificacao);
	public void altera(Notificacao notificacao);
	public List<Notificacao> listaTodos(String consulta); 
	public List<Notificacao> localizarMensagem(String consulta, String mensagem);
	public List<Notificacao> localizarIdNotificacao(String consulta, int id);

}

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import br.com.dentalweb.model.Notificacao;
import br.com.dentalweb.util.ConnectFactory;

/**
*
* @author Antonio Alves de Lima Filho
*/

public class NotificacaoDaoImp implements NotificacaoDao{
	private Session session;
	private Transaction t;
	private boolean commited = false;
	private List<Notificacao> list;
	private List lista;
	private Query query;

	
	public void grava(Notificacao notificacao) {
		try{
			session = ConnectFactory.getInstance();
			t = session.beginTransaction();
			session.save(notificacao);
			t.commit();
			commited = true;
		}finally{
			if(!commited){
				t.rollback();
			}
			session.close();
		}
	}
	
	public List<Notificacao> localizarMensagem(String consulta, String mensagem) {
		try{
			session = ConnectFactory.getInstance();
			list = null;
			query = session.getNamedQuery(consulta);
			query.setString("mensagem", "%"+mensagem+"%");
			list = query.list();
		}finally{
			session.close();
		}
		return list;	
	}
	
	public List<Notificacao> listaTodos(String consulta) {
		try{
			session = ConnectFactory.getInstance();
			t = session.beginTransaction();
			lista = session.getNamedQuery(consulta).list();
			t.commit();
		}finally{
			session.close();
		}
		return lista;
	}
	
	public void remove(Notificacao notificacao) {
		try{
			session = ConnectFactory.getInstance();
			t = session.beginTransaction();
			session.delete(notificacao);
			t.commit();
			commited = true;
		}finally{
			if(!commited){
				t.rollback();
			}
			session.close();
		}
	}
	
	public void altera(Notificacao notificacao) {
		try{
			session = ConnectFactory.getInstance();
			t = session.beginTransaction();
			session.update(notificacao);
			t.commit();
			commited = true;
		}finally{
			if(!commited){
				t.rollback();
			}
			session.close();
		}
	}

	public List<Notificacao> localizarIdNotificacao(String consulta, int id){
		try{
			session = ConnectFactory.getInstance();
			list = null;
			query = session.getNamedQuery(consulta);
			query.setInteger("id", id);
			list = query.list();
		}finally{
			session.close();
		}
		return list;	
	}


}

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.apache.commons.lang.StringEscapeUtils;
import org.primefaces.push.EventBus;
import org.primefaces.push.EventBusFactory;
import br.com.dentalweb.dao.NotificacaoDao;
import br.com.dentalweb.dao.NotificacaoDaoImp;
import br.com.dentalweb.model.Notificacao;

/**
*
* @author Antonio Alves de Lima Filho
*/

@ManagedBean(name="notificacaoController")
@RequestScoped
public class NotificacaoController implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = -6745079899914256290L;
	private String CHANNEL = "/notify";
	private String summary;
	private String detail;
	private EventBus eventBus;
	private Notificacao notificacao;
	private List<Notificacao> listaNotificacao = new ArrayList<Notificacao>();
	private DataModel<Notificacao> listaNotificacaoCadastradas;
	private FacesMessage dlgNotificacao;
	    
	@PostConstruct
    public void init() {
		if(listaNotificacao.isEmpty()){
			listaNotificacao = new NotificacaoDaoImp().listaTodos("notificacao.mostraTodos");
			listaNotificacaoCadastradas = new ListDataModel<Notificacao>(listaNotificacao);
		}
    }
	    
	public String getCHANNEL() {
		return CHANNEL;
	}

	public void setCHANNEL(String cHANNEL) {
		CHANNEL = cHANNEL;
	}

	public String getSummary() {
		return summary;
	}

	public void setSummary(String summary) {
		this.summary = summary;
	}

	public String getDetail() {
		return detail;
	}

	public void setDetail(String detail) {
		this.detail = detail;
	}

	public EventBus getEventBus() {
		return eventBus;
	}

	public void setEventBus(EventBus eventBus) {
		this.eventBus = eventBus;
	}

	public Notificacao getNotificacao() {
		return notificacao;
	}

	public void setNotificacao(Notificacao notificacao) {
		this.notificacao = notificacao;
	}

	public List<Notificacao> getListaNotificacao() {
		return listaNotificacao;
	}

	public void setListaNotificacao(List<Notificacao> listaNotificacao) {
		this.listaNotificacao = listaNotificacao;
	}

	public DataModel<Notificacao> getListaNotificacaoCadastradas() {
		return listaNotificacaoCadastradas;
	}

	public void setListaNotificacaoCadastradas(DataModel<Notificacao> listaNotificacaoCadastradas) {
		this.listaNotificacaoCadastradas = listaNotificacaoCadastradas;
	}

	public FacesMessage getDlgNotificacao() {
		return dlgNotificacao;
	}

	public void setDlgNotificacao(FacesMessage dlgNotificacao) {
		this.dlgNotificacao = dlgNotificacao;
	}

	//Exibe página cadastro notificação
	public String prepararAdicionarNotificacao(){
		eventBus = EventBusFactory.getDefault().eventBus();
		limpa();
		return "/paginaNotificacao/cadastrarNotificacao.xhtml";
	}

	//Exibe página notificação
	public String prepararExibeNotificacao(){
		limpa();
		return "/paginaNotificacao/exibeNotificacao.xhtml";
	}

	public void limpa() {
		listaNotificacao.clear();
		detail = null;
		init();
	}

	//Gravar dados
	public void adicionarNotificacao(){
		try{
			notificacao = new Notificacao();
			NotificacaoDao dao = new NotificacaoDaoImp();
			notificacao.setMensagem(detail);
			summary = "Aviso";
			dao.grava(notificacao);
			dlgNotificacao = new FacesMessage(FacesMessage.SEVERITY_INFO,  "Gravado com sucesso.",""); 
			FacesContext.getCurrentInstance().addMessage(null, dlgNotificacao);
		}finally{
			notificacao.limpaValores();
			limpa();
			agregar();
		}
	}
	
	public void agregar() {
		notificarPush();
	}
	
	public void notificarPush() {
		eventBus.publish(CHANNEL, new FacesMessage(StringEscapeUtils.escapeHtml(summary), StringEscapeUtils.escapeHtml(detail)));
	}	
	


}
Antonio Filho

Antonio Filho

Curtidas 0
POSTAR