Ich habe @Stateless
Bohne, die zwei Schnittstellen (remote und lokal) implementiert. Ich habe auch @LocalBean
eine Anotion für den Zugriff auf Bean mit einer No-Interface-Ansicht hinzugefügt.WELD-001408 Unzufriedene Abhängigkeiten beim Injizieren von EntityManager
@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote, WeatherDataBeanLocal {
@Inject
private EntityManager entityManager;
public WeatherDataBean() {
}
// ....attributes, getter & setter methods ....
}
Ich benutze @Inject
aus diesem Grunde from this example of JBoss AS7 quickstart genommen:
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.
Jetzt vorher habe ich verwendet:
@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;
In EJB und es funktioniert ohne Probleme. Aber mit @Inject
Anmerkung bekomme ich diesen Fehler:
WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject private ejb.WeatherDataBean.entityManager]
Hier ist, wie ich Klasse Ressourcen definiert:
public class Resources {
@SuppressWarnings("unused")
@PersistenceContext(unitName="WeatherStationJPA")
@Produces
private EntityManager entityManager;
@Produces
FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
Warum ist, dass ich diesen Fehler, wenn ich versuche, Entity-Manager zu injizieren?
EDIT: Auf Anfrage von @LightGuard ich Pakete bin hinzufügen, die ich Anmerkungen verweisen bin mit:
WeatherDataBean hat:
import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.inject.Inject;
Ressourcen hat :
Alles sieht korrekt aus. Sind Sie sicher, dass Sie die richtigen Anmerkungen haben (Pakete überprüfen)? Kann auch davon abhängen, wie Sie Dinge verpacken. – LightGuard
Bitte überprüfen Sie meine Antwort Ich habe hinzugefügt, welche Pakete ich für diese Anmerkungen verwende. Ich benutze EAR-Projekt, um EJB-Projekt, EJBClient-Projekt, JPA-Projekt und JSF-Projekt zu verpacken. –
Ah, okay, wenn du ein EAR verwendest, ändern sich die Dinge ein bisschen. Sie müssen angeben, wo Sie die Injektion durchführen, in welcher Bibliothek sich die Klassen befinden und wo sich Ihre beans.xml-Dateien befinden. – LightGuard