在我的Java EE項目中,有幾個「Java EE」模塊和一個Web模塊。 其中的Java EE模塊提供了一類以CDI要由其他模塊來使用:爲什麼CDI注射不能在某些模塊中工作,而在其他模塊中不能工作?
@ApplicationScoped
public class XFactory {
@Produces @Actual
public X create() {
return new X();
}
}
它們被注入
@SessionScoped
public class Target implements Serializable {
X x;
@Inject
public void setX(@Actual X x){
this.x = x;
}
}
然而,這隻能在Java中的一個EE模塊和Web模塊中。在所有其餘的Java EE模塊,注射持續失敗,我無能,原因是:我得到的是WELD-1408,不滿意的依賴。
所有的模塊都在適當的地方beans.xml
,他們都工作,只要我不改用注射。大多數目標bean已經被用作JSF中的注入bean。 工作的Java EE模塊的特殊之處在於,該bean被注入到Web模塊中的servlet中,而不是JSF中。
該項目與Java EE 6,EJB 3.1 GlassFish中運行3.1。依賴由Maven 3管理。X
本身是Serializable
,以滿足鈍化範圍。
你有沒有遇到過這個?我可以做錯什麼?
更新:添加依賴管理上面這句話。
更新:更正了@Actual
在Target
中的位置。
更新:實驗一天後更新更多的細節描述。
還沒有答案。我將逐步重新編寫模塊,並查看哪個點注入失敗。儘管如此,仍然欣賞你的意見。 –
似乎有比我第一次想到更多的不幸。我的聲明表明,在單個項目之外的一切正常工作可能是錯誤的: 即使在最簡單的模塊中注入也失敗。 我開始想知道爲什麼它在其中一箇中起作用。 –