2011-07-28 11 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がJSFではなくWebモジュールのサーブレットに注入されることです。

このプロジェクトは、GlassFish 3.1のJava EE 6、EJB 3.1で動作します。依存関係は、Maven 3によって管理されます。X自体は、不動態化範囲を満たすためにSerializableです。

あなたはこれまでに遭遇しましたか?私は何が間違っていたでしょうか?

更新:上記の依存関係管理の注釈を追加しました。

更新@Actualの位置をTargetに修正しました。

更新:詳細については、実験の日後に説明が更新されました。

+0

まだ回答がありません。モジュールを段階的に書き直して、注入がうまくいかないところを見ていきます。しかし、あなたの入力を感謝しています。 –

+0

私は最初に思ったよりも多くの不安があるようです。その1つのプロジェクトの外ですべてがうまく動作するという私の声明は、間違っていた可能性があります。 モジュールが最も単純な場合でも注入は失敗します。 私はそれがなぜ彼らの1人で働くのか不思議に思っています。 –

答えて

1

これは私がちょうど3.1.1およびJDK 7をGlassFishのために私のシステムを更新しており、問題はない

をその付属図書館の一つで、Glassfishの3.1にかかわる問題であるように思われる、または可能性JDK 6で発生します。

+0

答えを受け入れる前に 'X'をプロダクションコードに置き換えて、もう少し調べてみましょう。 –

関連する問題