Tengo @Stateless
bean que implementa dos interfaces (remota y local). También agregué la anotación @LocalBean
para acceder al bean con una vista sin interfaz.WELD-001408 Dependencias insatisfechas cuando se inyecta EntityManager
@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote, WeatherDataBeanLocal {
@Inject
private EntityManager entityManager;
public WeatherDataBean() {
}
// ....attributes, getter & setter methods ....
}
utilizo @Inject
por esta razón tomada from this example of JBoss AS7 quickstart:
We use the "resource producer" pattern, from CDI, to "alias" the old fashioned @PersistenceContext injection of the entity manager to a CDI style injection. This allows us to use a consistent injection style (@Inject) throughout the application.
Ahora anteriormente he utilizado:
@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;
En EJB y funciona sin ningún problema. Pero con @Inject
anotación consigo este error:
WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject private ejb.WeatherDataBean.entityManager]
Aquí es cómo han definido recursos de clase:
public class Resources {
@SuppressWarnings("unused")
@PersistenceContext(unitName="WeatherStationJPA")
@Produces
private EntityManager entityManager;
@Produces
FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
¿Por qué es que me sale este error si intento de inyectar gestor de la entidad?
EDIT: A petición de @LightGuard Estoy añadiendo paquetes que estoy usando para hacer referencia a las anotaciones:
WeatherDataBean tiene:
import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.inject.Inject;
Recursos ha :
import javax.enterprise.inject.Produces; import javax.faces.context.FacesContext; import javax.inject.Singleton; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;
Todo parece correcto. ¿Estás seguro de que tienes las anotaciones correctas (comprueba los paquetes)? También puede depender de cómo estás empaquetando cosas. – LightGuard
Compruebe mi respuesta He agregado qué paquetes uso para estas anotaciones. Estoy utilizando el proyecto EAR para empaquetar el proyecto EJB, el proyecto EJBClient, el proyecto JPA y el proyecto JSF. –
Ah, está bien si estás usando un EAR, las cosas cambian un poco. Tendrá que ubicar dónde está haciendo la inyección, en qué biblioteca se encuentran las clases y dónde se encuentran sus archivos beans.xml. – LightGuard