我有@Stateless
bean,它實現兩個接口(遠程和本地)。我還添加了@LocalBean
anotation來訪問具有無界面視圖的bean。WELD-001408注入EntityManager時不滿意的依賴關係
@Stateless
@LocalBean
public class WeatherDataBean implements WeatherDataBeanRemote, WeatherDataBeanLocal {
@Inject
private EntityManager entityManager;
public WeatherDataBean() {
}
// ....attributes, getter & setter methods ....
}
我用@Inject
爲此採取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.
現在以前我用:
@PersistenceContext(unitName="WeatherStationJPA")
private EntityManager entityManager;
在EJB和它的作品沒有任何問題。但隨着@Inject
註解我得到這個錯誤:
WELD-001408 Unsatisfied dependencies for type [EntityManager] with qualifiers [@Default] at injection point [[field] @Inject private ejb.WeatherDataBean.entityManager]
這裏是如何我已經類資源定義:
public class Resources {
@SuppressWarnings("unused")
@PersistenceContext(unitName="WeatherStationJPA")
@Produces
private EntityManager entityManager;
@Produces
FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
}
爲什麼,如果我嘗試注入實體管理器,我得到這個錯誤?
編輯: 在從@LightGuard我加入,我使用引用註釋包要求:
WeatherDataBean有:
import javax.ejb.LocalBean; import javax.ejb.Stateless; import javax.inject.Inject;
資源有:
import javax.enterprise.inject.Produces; import javax.faces.context.FacesContext; import javax.inject.Singleton; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext;
一切都看起來正確。你確定你有正確的註釋(檢查包)嗎?也可能取決於你如何包裝東西。 – LightGuard 2012-08-01 17:56:31
請檢查我的答案我已經添加了哪些軟件包用於這些註釋。我正在使用EAR項目來打包EJB項目,EJBClient項目,JPA項目和JSF項目。 – 2012-08-01 18:06:40
啊,好的,如果你使用的是EAR,東西會改變一點。您必須放置您正在進行注入的位置,類所在的庫以及beans.xml文件所在的位置。 – LightGuard 2012-08-04 07:12:21