Boa noite a todos,
Estou com um problema ao trabalhar com injeção de dependência no JSF. Já procurei, mas nunca encontro soluções para problemas semelhantes ao meu.
Estou trabalhando com JSF 2.0, Primefaces, JPA , Tomcat 7, Mysql
O erro que eu estou recebendo ao chamar /RMX/servico.jsf é :
exception
javax.servlet.ServletException: Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado ServicoBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:606)
root cause
com.sun.faces.mgbean.ManagedBeanCreationException: Um erro ocorreu ao realizar a injeção de recurso no bean gerenciado ServicoBean
com.sun.faces.mgbean.BeanBuilder.invokePostConstruct(BeanBuilder.java:229)
servico.xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
<title>RMX - Servico</title>
</h:head>
<h:body>
<h:form>
<p:growl id="messages" />
</h:form>
<p:growl id="growl" showDetail="true" showSummary="true" />
<h:form id="frmCadastro">
<p:panel header="Dados do Servico">
<h:panelGrid columns="1" cellspacing="5">
<h:outputText value="Nome" />
<p:inputText required="true" label="Nome" id="txtNome"
value="#{ServicoBean.servico.nome}" />
<p:commandButton value="Cadastrar" action="#{ServicoBean.salvar}"
update="growl frmLista @form"
rendered="#{!ServicoBean.editar}"
image="ui-icon ui-icon-disk" />
<p:commandButton value="Alterar" action="#{ServicoBean.salvar}"
update="growl frmLista @form"
rendered="#{ServicoBean.editar}"
image="ui-icon ui-icon-disk" />
<p:commandButton value="Cancelar"
action="#{ServicoBean.cancelar}" immediate="true"
update="growl frmLista @form"
rendered="#{ServicoBean.editar}"
image="ui-icon ui-icon-close" />
</h:panelGrid>
</p:panel>
</h:form>
<br />
<h:form id="frmLista">
<p:dataTable id="tbServicos" var="f"
value="#{ServicoBean.servicos}" paginator="true" rows="3" >
<p:column headerText="NOME" sortBy="#{f.nome}" filterBy="#{f.nome}">
#{f.nome}
</p:column>
<p:column>
<f:facet name="header">Operações</f:facet>
<p:commandButton image="ui-icon ui-icon-trash" action="#{ServicoBean.excluir}"
update="@form tbServicos frmCadastroServicos" title="Excluir" >
<f:setPropertyActionListener
target="#{ServicoBean.ServicoSelecionado}" value="#{f}" />
</p:commandButton>
<p:commandButton image="ui-icon ui-icon-pencil" action="#{ServicoBean.alterar}"
update="growl tbServicos frmCadastroServicos @form" title="Editar" >
<f:setPropertyActionListener target="#{ServicoBean.Servico}"
value="#{f}" />
</p:commandButton>
</p:column>
</p:dataTable>
</h:form>
</h:body>
</html>
ServicoBean.java
package br.com.rmx.bean;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import br.com.rmx.dao.DAOServico;
import br.com.rmx.model.Servico;
/**
* @author rxavier
*
*/
@ManagedBean(name="ServicoBean")
@SessionScoped
public class ServicoBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = -5380045949613764576L;
@ManagedProperty(value = "#{daoServico}")
private DAOServico daoServico;
private Servico servicoSelecionado;
private List<Servico> servicos;
private boolean editar = false;
private FacesContext context;
private Servico servico = new Servico();
public DAOServico getDaoServico() {
return daoServico;
}
public void setDaoServico(DAOServico daoServico) {
this.daoServico = daoServico;
}
public FacesContext getContext() {
return context;
}
public void setContext(FacesContext context) {
this.context = context;
}
public ServicoBean() {
System.out.println("CRIANDO ServicoBean - @ViewScoped");
}
@PostConstruct
public void listar() {
servicos = daoServico.listar();
}
public void salvar() {
daoServico.salvar(servico);
listar();
exibirMensagem(servico.getNome() + " Cadastrado com sucesso");
servico = new Servico();
editar = false;
}
public void alterar() {
editar = true;
}
public void excluir() {
daoServico.excluir(servicoSelecionado);
servicoSelecionado = null;
listar();
}
public String cancelar() {
servico = new Servico();
servicoSelecionado = null;
listar();
editar = false;
return "produto";
}
private void exibirMensagem(String msg) {
context = FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage("Mensagem", msg));
}
public Servico getServico() {
return servico;
}
public void setServico(Servico obj) {
this.servico = obj;
}
public Servico getServicoSelecionado() {
return servicoSelecionado;
}
public void setServicoSelecionado(Servico objSelecionado) {
this.servicoSelecionado = objSelecionado;
}
public List<Servico> getServicos() {
return servicos;
}
public void setServicos(List<Servico> objs) {
this.servicos = objs;
}
public boolean isEditar() {
return editar;
}
public void setEditar(boolean editar) {
this.editar = editar;
}
}
DAOServico.java
package br.com.rmx.dao;
import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.apache.log4j.Logger;
import br.com.rmx.model.Servico;
@ManagedBean(name="daoServico")
@SessionScoped
public class DAOServico extends Dao<Servico> implements Serializable {
/**
*
*/
private static final long serialVersionUID = -7582190006688069970L;
public DAOServico(){
super(Servico.class);
}
public List<Servico> listar() {
Query query = entityManager.createQuery("from Servico");
@SuppressWarnings("unchecked")
List<Servico> resultList = query.getResultList();
resultList.remove(null);
return resultList;
}
public Servico buscar(String nome) {
Query query = entityManager.createQuery("from Servico f where f.nome = ?1");
query.setParameter(1, nome);
List<Servico> lista = query.getResultList();
return (lista.isEmpty() ? null : lista.get(0));
}
}
Dao.java
package br.com.rmx.dao;
import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.persistence.EntityManager;
import org.apache.log4j.Logger;
import br.com.rmx.model.Servico;
@ManagedBean(name="dao")
@ApplicationScoped
public abstract class Dao<T> {
private Class persistClass;
@ManagedProperty(value="#{connectionFactory.entityManager}")
protected EntityManager entityManager;
public Dao(Class classe)
{
this.persistClass = classe;
}
public void salvar(T obj)
{
entityManager.getTransaction().begin();
entityManager.persist(obj);
entityManager.getTransaction().commit();
}
public T buscar(Object pk)
{
return (T) entityManager.find(persistClass, pk);
}
public void excluir(T obj) {
entityManager.getTransaction().begin();
entityManager.remove(obj);
entityManager.getTransaction().commit();
}
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
}
Obrigado!