私の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
に修正しました。
更新:詳細については、実験の日後に説明が更新されました。
まだ回答がありません。モジュールを段階的に書き直して、注入がうまくいかないところを見ていきます。しかし、あなたの入力を感謝しています。 –
私は最初に思ったよりも多くの不安があるようです。その1つのプロジェクトの外ですべてがうまく動作するという私の声明は、間違っていた可能性があります。 モジュールが最も単純な場合でも注入は失敗します。 私はそれがなぜ彼らの1人で働くのか不思議に思っています。 –