1
resposta

Ambiguous dependencies for type EntityManager with qualifiers @Default

Quando crio o arquivo EntityManagerProducer:


public class EntityManagerProducer {

    @Produces
    @RequestScoped
    public EntityManager createEntityManager() {
        return JPAUtil.criaEntityManager();
    }
}

 que retorna o JPAUtil:
public class JPAUtil {

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

ele gera o seguinte erro:

org.jboss.weld.exceptions.DeploymentException: WELD-001409: Ambiguous dependencies for type EntityManager with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public br.com.caelum.vraptor.dao.ProdutoDao(EntityManager)
  at br.com.caelum.vraptor.dao.ProdutoDao.<init>(ProdutoDao.java:0)
  Possible dependencies: 
  - Producer Method [EntityManager] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @RequestScoped public br.com.caelum.vraptor.producers.EntityManagerProducer.createEntityManager()],
  - Producer Method [EntityManager] with qualifiers [@Any @Default] declared as [[BackedAnnotatedMethod] @Produces @RequestScoped public br.com.caelum.vraptor.jpa.EntityManagerCreator.getEntityManager()]
1 resposta

Tudo bem Roberto?

O Weld tá falando pra você que tem dois caras capazes de produzir um EntityManager pra você. Então quando você injeta ele não sabe qual utilizar.

Nesse caso é o que você criou e provavelmente um produtor do plugin vraptor-jpa.

Uma solução neste caso seria remover o seu produtor, e deixar apenas o do plugin do Vraptor.

Abraço!