Estou estudando sobre CDI e desenvolvendo um mini aplicação para tal propósito e utilizando:
- GlassFish 4.1.1
- Netbeans 8.1
- JSF 2.2
- Primefaces 5.0
Eu basicamente travei na minha primeira tentativa de usar CDI e não consigo solucionar o seguinte erro:
Grave: Exception while loading the app : CDI deployment failure:WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private br.com.ddavel.progro.dao.UsuarioDAO.em
atbr.com.ddavel.progro.dao.UsuarioDAO.em(UsuarioDAO.java:0)
Minhas classe que tem anotações do CDI são:
package br.com.ddavel.progro.dao;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class FabricaDeConexoes{
private static EntityManagerFactory emf;
@Produces
@RequestScoped
public EntityManager criaEntityManager(){
if (emf == null){
emf = Persistence.createEntityManagerFactory("ProgroPU");
}
return emf.createEntityManager();
}
public void finaliza(@Disposes EntityManager em) {
em.close();
}
}
e essa
package br.com.ddavel.progro.dao;
import br.com.ddavel.progro.entidades.Usuario;
import java.io.Serializable;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
public class UsuarioDAO implements Serializable{
@Inject
private EntityManager em;
public List<Usuario> getLista(){
TypedQuery<Usuario> query = em.createNamedQuery("Usuario.findAll",
Usuario.class);
return query.getResultList();
}
public Usuario merge(Usuario usuario){
em.getTransaction().begin();
Usuario novo = em.merge(usuario);
em.getTransaction().commit();
return novo;
}
public void delete(Usuario usuario){
em.getTransaction().begin();
em.remove(em.merge(usuario));
em.getTransaction().commit();
}
}
Como resolver esse problema?