Amigos em primeiro lugar deixo claro que antes de postar já fiz várias pesquisas, tenho N links aqui nos favoritos, rsrsrs, sobre o assunto, encontrei alguns posts semelhantes, admito que poderiam até resolver porém por falta de experiência ainda em Java, posso não ter compreendido, o que é bem provável.
Bom ao tentar executar minha aplicação recebo este erro:
Jun 21, 2013 3:41:44 PM com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{candidatoMB.localizarCPF()}: java.lang.NullPointerException
javax.faces.FacesException: #{candidatoMB.localizarCPF()}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:791)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1256)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: javax.faces.el.EvaluationException: java.lang.NullPointerException
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:101)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:101)
... 23 more
Caused by: java.lang.NullPointerException
at controlador.CandidatoMB.localizarCPF(CandidatoMB.java:85)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
at org.jboss.weld.util.el.ForwardingMethodExpression.invoke(ForwardingMethodExpression.java:39)
at org.jboss.weld.el.WeldMethodExpression.invoke(WeldMethodExpression.java:50)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
... 24 more
Bom como base para o aprendizado em CDI estou usando este link:
Bom está tudo configurado como manda o figurino, uso Tomcat 7, Hibernate, JPA, JSF, Eclipse Juno, o tomcat tinha um problema ao iniciar resolvi conforme orientações em outros sites, enfim mas este erro realmente não sei se é o EntityManager que está nulo ou o meu DAO generic, ambos que entendi que poderia ser injetado.
Segue as partes relevantes do código fonte:
DAO (Genérico)
public class DAO<T> implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private final Class<T> classe;
private EntityManager em;
public DAO(Class<T> classe) {
this.classe = classe;
}
public void adiciona(T t) {
try {
em.getTransaction().begin();
em.persist(t);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
public void remove(T t) {
try {
em.getTransaction().begin();
em.remove(em.merge(t));
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
public void atualiza(T t) {
try {
em.getTransaction().begin();
em.merge(t);
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback();
} finally {
em.close();
}
}
@SuppressWarnings("unchecked")
public List<T> getAll() {
CriteriaQuery<T> query = em.getCriteriaBuilder().createQuery(classe);
query.select(query.from(classe));
List<T> lista = em.createQuery(query).getResultList();
em.close();
return lista;
}
@SuppressWarnings("unchecked")
public List<T> getListaPaginado(int inicio, int quantidade) {
Query query = em
.createQuery("SELECT e FROM " + classe.getName() + " e")
.setFirstResult(inicio).setMaxResults(quantidade);
List<T> lista = query.getResultList();
em.close();
return lista;
}
public T buscaPorId(int id) {
return em.find(classe, id);
}
@SuppressWarnings("unchecked")
public int count() {
Long resultado = new Long(0L);
Query query = em.createQuery("select count(e) from " + classe.getName()
+ " e");
resultado = (Long) query.getSingleResult();
em.close();
return resultado.intValue();
}
@SuppressWarnings("unchecked")
public List<T> getLista(String cSql) {
List<T> lista = em.createQuery(cSql).getResultList();
em.close();
return lista;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
public Class<T> getClasse() {
return classe;
}
}
DaoFactory
public class DAOFactory<T extends Serializable> {
@Inject
EntityManager em;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Produces
public DAO createDAO(InjectionPoint injectionPoint)
throws ClassNotFoundException {
ParameterizedType type = (ParameterizedType) injectionPoint.getType();
Class classe = (Class) type.getActualTypeArguments()[0];
return new DAO(classe);
}
}
PersistenceUtil
public class PersistenceUtil {
private static EntityManagerFactory emf = Persistence
.createEntityManagerFactory("rhnec");
@Produces
@RequestScoped
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void close(@Disposes @Any EntityManager em) {
em.close();
}
}
Bean - este é onde entendo que devo injetar o meu DAO
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.persistence.Query;
import modelo.Candidato;
import org.primefaces.event.FlowEvent;
import dao.DAO;
@ManagedBean(name = "candidatoMB")
@SessionScoped
public class CandidatoMB implements Serializable {
private static final long serialVersionUID = 1L;
private Candidato candidato = new Candidato();
private List<Candidato> candidatos;
private String cpf = "";
private String senha = "";
private boolean showNewButton = false;
@Inject
private DAO<Candidato> dao;
public CandidatoMB() {
super();
}
public boolean localizarCPF() {
[b]candidatos = dao.getLista("Select c from Candidato c where c.cpf = '"
+ cpf + "' and c.senha = '" + senha + "'");[/b]
boolean encontrado = !((Query) candidatos).getResultList().isEmpty();
String mensagem = null;
this.showNewButton = false;
if (encontrado) {
editarCandidato(candidato);
mensagem = "cadCurriculo.jsf";
} else {
mensagem = "CPF não localizado!";
FacesContext.getCurrentInstance().addMessage(null,
new FacesMessage(mensagem));
this.showNewButton = true;
}
return encontrado;
}
O erro acontece nesta parte acima ai do Bean no dao.getLista(), bom peço a ajuda e desculpas por repetições no forum, mas realmente já estou a muito tempo nisto, alguma idéia, erro?
Apenas para ressaltar o web.xml, beans.xml, context.xml tudo está nas suas pastas e configurados.
Agradeço
César