Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro ao Injetar o Entity Manager

Olá a todos.

Seguindo o passo a passo desta aula, além de pesquisar por erros desta natureza com outros alunos em outros projetos, ainda estou com o seguinte problema: Não consigo fazer a injeção de dependência do EntityManager, como explicado na aula.

Onde posso ter errado?

Meu beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans     xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                            http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
        version="1.1" bean-discovery-mode="all">

    <scan>
        <exclude name="com.google.common.util.concurrent.MoreExecutors$SameThreadExecutorService"/>
    </scan>

</beans>

Meu ProdutoDao.java

package br.com.caelum.vraptor.dao;

import java.util.List;

import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;

import br.com.caelum.vraptor.model.Produto;
@RequestScoped
public class ProdutoDao {

    private final EntityManager em;
    @Inject
    public ProdutoDao(EntityManager em) {
        this.em = em;
    }

    public ProdutoDao() {
        this(null);
    }

    public void adiciona(Produto produto) {
        em.getTransaction().begin();
        em.persist(produto);
        em.getTransaction().commit();
    }

    public void remove(Produto produto) {
        em.getTransaction().begin();
        em.remove(busca(produto));
        em.getTransaction().commit();
    }

    public Produto busca(Produto produto) {
        return em.find(Produto.class, produto.getId());
    }

    @SuppressWarnings("unchecked")
    public List<Produto> lista() {
        return em.createQuery("select p from Produto p").getResultList();
    }
}

Meu JPAUtil.java

package br.com.caelum.vraptor.util;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class JPAUtil {

    public static EntityManager criaEntityManager() {
        EntityManagerFactory factory = Persistence
                .createEntityManagerFactory("default");
        return factory.createEntityManager();
    }
}

Meu EntityManagerProducer.java

package br.com.caelum.vraptor.util;

import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;

public class EntityManagerProducer {

    @Produces
    @RequestScoped
    public EntityManager criaEM() {
        return JPAUtil.criaEntityManager();
    }
}
1 resposta
solução!

Desconsiderem por favor... analisando a transcrição da aula, o pacote do produces é o br.com.caelum.vraptor.producers, e não o utils.

Agora que mudei, funcionou.