No bean is eligible for injection at the injection point
I am trying to use CDI to inject DAO into my ManagedBean
ManagedBean:
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import br.com.timbrasil.network.dao.ColaboradorDao;
import br.com.timbrasil.network.modelo.Colaborador;
@SuppressWarnings("serial")
@Named
@RequestScoped
public class LoginBean implements Serializable{
private Colaborador colaborador = new Colaborador();
@Inject
private ColaboradorDao dao;
DAO
import java.io.Serializable;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import br.com.timbrasil.network.modelo.Colaborador;
@SuppressWarnings("serial")
@RequestScoped
public class ColaboradorDao implements Serializable{
@Inject
private EntityManager manager;
public Colaborador buscaEmailESenha(Colaborador colaborador) {
String jqpl = "select c from Colaborador c where c.email = :pEmail and c.senha = :cSenha";
TypedQuery<Colaborador> query = this.manager.createQuery(jqpl, Colaborador.class);
query.setParameter("pEmail", colaborador.getEmail());
query.setParameter("pSenha", colaborador.getSenha());
colaborador = query.getSingleResult();
return colaborador;
}
}
@Edit My EntityManagerProducer:
import javax.enterprise.context.ApplicationScoped;
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;
@ApplicationScoped
public class JPAUtil {
private static EntityManagerFactory emf = Persistence
.createEntityManagerFactory("blueMonster");
@Produces
@RequestScoped
public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void close(@Disposes EntityManager manager) {
manager.close();
}
}
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="annotated">
</beans>
Eclipse shows me a warning at @Inject saying:
No bean is eligible for injection to the injection point [JSR-299 ยง5.2.1]
When I try to deploy it to WildFly:
15:04:41,551 INFO [org.hibernate.Version] (ServerService Thread Pool -- 51) HHH000412: Hibernate Core {4.3.7.Final}
15:04:41,551 INFO [org.hibernate.cfg.Environment] (ServerService Thread Pool -- 51) HHH000206: hibernate.properties not found
15:04:41,551 INFO [org.hibernate.cfg.Environment] (ServerService Thread Pool -- 51) HHH000021: Bytecode provider name : javassist
15:04:41,676 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC000001: Failed to start service jboss.deployment.unit."network.war".WeldStartService: org.jboss.msc.service.StartException in service jboss.deployment.unit."network.war".WeldStartService: Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1904) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [rt.jar:1.8.0_20]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [rt.jar:1.8.0_20]
at java.lang.Thread.run(Unknown Source) [rt.jar:1.8.0_20]
Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ColaboradorDao with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private br.com.timbrasil.network.mb.LoginBean.dao
at br.com.timbrasil.network.mb.LoginBean.dao(LoginBean.java:0)
at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:372)
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:293)
at org.jboss.weld.bootstrap.Validator.validateGeneralBean(Validator.java:134)
at org.jboss.weld.bootstrap.Validator.validateRIBean(Validator.java:167)
at org.jboss.weld.bootstrap.Validator.validateBean(Validator.java:531)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:68)
at org.jboss.weld.bootstrap.ConcurrentValidator$1.doWork(ConcurrentValidator.java:66)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:60)
at org.jboss.weld.executor.IterativeWorkerTaskFactory$1.call(IterativeWorkerTaskFactory.java:53)
at java.util.concurrent.FutureTask.run(Unknown Source) [rt.jar:1.8.0_20]
... 3 more
I have beans.xml in my project just to make CDI work.
As ColaboradorDao is a class that belongs to me, I don't need to use @Produces, right? Then why doesn't CDI create what? How can I fix it?
+3
source to share
1 answer
Actually, please clarify the content of beans.xml
yours, maybe you need to add scope to your dao class.
Since you are using annotation, you also need to provide scope on your dao. It is not matched because it is not annotated.
@SuppressWarnings("serial")
@RequestScoped
public class ColaboradorDao implements Serializable{
Then it should start working.
+4
source to share