Bom dia a todos!
Após injetar CDI nas minhas classes AutorDAO, AutorBean, LivroDAO e LivroBean tenho tido os erros conforme abaixo. Segue também parte dos códigos das classes para análise.
Agradeço antecipadamente qualquer apoio na solução deste erro.
Atte.,
Vicente,
Erro apresentado no console do eclipse
GRAVE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/livraria]]
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/livraria]]
Caused by: org.jboss.weld.exceptions.DeploymentException: Exception List with 2 exceptions:
Exception 0 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject br.com.caelum.livraria.dao.AutorDAO.manager
at br.com.caelum.livraria.dao.AutorDAO.manager(AutorDAO.java:0)
Exception 1 :
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject br.com.caelum.livraria.dao.LivroDAO.manager
at br.com.caelum.livraria.dao.LivroDAO.manager(LivroDAO.java:0)
Parte da classe AutorBean
package br.com.caelum.livraria.bean;
import java.io.Serializable;
import java.util.List;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.caelum.livraria.dao.AutorDAO;
import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.util.RedirectView;
@Named
@ViewScoped // javax.faces.view.ViewScoped
public class AutorBean implements Serializable {
private static final long serialVersionUID = 1L;
private Autor autor = new Autor();
private Integer autorId;
@Inject
AutorDAO autorDao;
public List<Autor> getAutores() {
return autorDao.listaTodos();
}
Restante do código omitido
Parte da classe AutorDAO
package br.com.caelum.livraria.dao;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import br.com.caelum.livraria.modelo.Autor;
@SuppressWarnings("serial")
public class AutorDAO implements Serializable {
@Inject
EntityManager manager;
private DAO<Autor> autorDao;
@PostConstruct
void init() {
this.autorDao = new DAO<Autor>(this.manager, Autor.class);
}
public void adiciona(Autor t) {
autorDao.adiciona(t);
}
Restante do código omitido
Parte da classe LivroBean
package br.com.caelum.livraria.bean;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.caelum.livraria.dao.AutorDAO;
import br.com.caelum.livraria.dao.LivroDAO;
import br.com.caelum.livraria.modelo.Autor;
import br.com.caelum.livraria.modelo.Livro;
import br.com.caelum.livraria.modelo.LivroDataModel;
@Named
@ViewScoped
public class LivroBean implements Serializable{
private static final long serialVersionUID = 1L;
private Livro livro = new Livro();
private Integer autorId;
private List<Livro> livros;
private LivroDataModel livroDataModel = new LivroDataModel();
private List<String> generos = Arrays.asList("Romance", "Drama", "Ação");
@Inject
private LivroDAO livroDao;
@Inject
private AutorDAO autorDao;
public void gravar() {
System.out.println("Gravando livro " + this.livro.getTitulo());
if (this.livro.getAutores().isEmpty()) {
FacesContext.getCurrentInstance().addMessage("autor", new FacesMessage("Livro deve ter pelo menos um Autor."));
return;
}else{
if (this.livro.getId() == null) {
livroDao.adiciona(this.livro);
this.livros = livroDao.listaTodos();
}else{
this.livroDao.atualiza(this.livro);
}
this.livro = new Livro();
}
}
Restante do código omitido
Parte da classe LivroDAO
package br.com.caelum.livraria.dao;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import br.com.caelum.livraria.modelo.Livro;
@SuppressWarnings("serial")
public class LivroDAO implements Serializable {
@Inject
EntityManager manager;
private DAO<Livro> livroDao;
@PostConstruct
void init() {
this.livroDao = new DAO<Livro>(this.manager, Livro.class);
}
public void adiciona(Livro t) {
livroDao.adiciona(t);
}
Restante do código omitido
Parte da classe DAO
package br.com.caelum.livraria.dao;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
public class DAO<T> implements Serializable{
private static final long serialVersionUID = 1L;
private final Class<T> classe;
private EntityManager em;
public DAO( EntityManager em, Class<T> classe) {
this.classe = classe;
this.em = em;
}
Restante do código omitido