3

おそらく、 CDI 1.0 仕様をくまなく調べるのに時間がかかりすぎたのかもしれませんが、aMETA-INF/beans.xmlが必要な正確な場所の詳細な説明を見つけることができませんでした。

( Bean の発見に関するセクションでは、特定のことを示唆するいくつかの興味をそそるステートメントを作成しますが、それが規範的かどうかはわかりません。)

大まかに言えば、Bean アーカイブには 1 つ必要であることを理解しています。

ただし、準拠する CDI 1.0 環境で次の jar を使用する場合を考えてみましょう。

  • インターフェイスのみを含むインターフェイスjar
  • これらのインターフェースを実装し、インジェクション ポイントを備えているがプロデューサー メソッドを含まないCDI Bean を含む実装 jar@Inject
  • で注釈が付けられた単一のメソッドを持つ単一の Java オブジェクトを (簡単にするために) 含むプロデューサーjar@Produces

プロデューサー jar実装 jarの両方が Bean アーカイブである必要があることは論理的に思えます。そのため、それぞれMETA-INF/beans.xmlに含まれるリソースが必要になります。

しかし、完全を期すために、これは実際に当てはまりますか? 実装 jarはポイントのみを使用し、@InjectCDI 注釈を使用しないため、他の方法でスキャンされますか? 別の見方をすると、この例では、実装 jarはインジェクションのターゲットとしてのみ使用され、インジェクタブルのソースとしては使用されません。したがって、ある種のロジックを確認できました: 見て、注入できるBean を生成する jar のみを Bean アーカイブとして宣言する必要があります。(それが真実だと言っているのではありません。その議論が行われているのを見ることができただけです。)

最後に、インターフェース jarの全体の問題があります。定義上、Bean は含まれていませんが、GlassFish では、インターフェース jarMETA-INF/beans.xmlでさえファイルが必要なケースをずっと前に見てきました。それは私には間違っているように思えますが、驚いたことに、これを確認または否定するセクションが仕様に実際に見つからないことに気付きました。

だから:beans.xmlどこでも?注射剤を生産する瓶だけですか?注射対象の瓶だけ?または...?

4

1 に答える 1

2

a.) プロデューサー jar と impl jar の両方に beans.xml マーカー ファイルが必要です。

b.) 純粋なインターフェース jar では、beans.xml マーカー ファイルは必要ありません。GlassFish が失敗する場合、これは gf バグです。害はありません。

于 2012-06-06T15:18:14.150 に答える