2011-07-28 149 views
3

在我的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,以滿足鈍化範圍。

你有沒有遇到過這個?我可以做錯什麼?

更新:添加依賴管理上面這句話。

更新:更正了@ActualTarget中的位置。

更新:實驗一天後更新更多的細節描述。

+0

還沒有答案。我將逐步重新編寫模塊,並查看哪個點注入失敗。儘管如此,仍然欣賞你的意見。 –

+0

似乎有比我第一次想到更多的不幸。我的聲明表明,在單個項目之外的一切正常工作可能是錯誤的: 即使在最簡單的模塊中注入也失敗。 我開始想知道爲什麼它在其中一箇中起作用。 –

回答

1

這似乎是在Glassfish的3.1的一個問題,它包括圖書館之一,或者可能在JDK 6

我剛剛更新了我的系統到GlassFish 3.1.1和JDK 7,而問題不再也發生了。

+0

在接受答案之前,我會進一步研究一下,同時用生產代碼替換'X's。 –

相關問題