問題タブ [jsr299]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
1493 参照

java - サブクラスのランタイム タイプでイベントを発生させる

実行時にしか判別できないタイプのイベントを CDI で発生させたいと考えています。たとえば、A実装クラスAAAB. 私は2人のオブザーバーを持っています:

次に、いくつかのイベント プロデューサー:

orAのサブタイプではないため、これは機能しません(逆です)。サブタイプを取るメソッドがあることに気付きました:AAABselect

ただし、正しくパラメーター化されたClassオブジェクトが必要です (間違っていれば正しい)、実行時にビルドできません。

解決策はありますか、または修飾子 (おそらくClass<?>メソッドの注釈) を使用する必要がありますか?

0 投票する
2 に答える
3680 参照

java - 同じクラスのオブジェクトを異なるスコープで注入するにはどうすればよいですか?

単純さと正確さの観点から、同じクラスのオブジェクトを異なるスコープで注入するための最良の方法は何ですか?

サーブレットで、スコープが異なる同じクラスのオブジェクトを挿入したいと思います。jsfを使用するかどうかはまだわかりません。

  • シンプルさ:Qualifierスコープごとにとプロデューサーメソッドを作成するのは多すぎます。インターフェイスの作成、2つのクラス、および追加と代替beans.xmlも多すぎます。メソッドを持つことAddress#isCurrent()は意味がありません。
  • 正しさ:JSR299、3.11によると:注入ポイント修飾子として@Namedを使用することはお勧めしません。 まだ理由はわかりません。インジェクションポイントで
    使用すると 、では機能しますが、では機能しません。以下の名前付きスニペットを参照してください。@Named@ApplicationScoped@RequestScoped@SessionScoped

春にはとても簡単です:
春のスニペット


名前付きスニペット

0 投票する
1 に答える
808 参照

cdi - CDI インジェクションの場合、プロデューサー アーカイブとインジェクト アーカイブに META-INF/beans.xml が必要ですか?

おそらく、 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どこでも?注射剤を生産する瓶だけですか?注射対象の瓶だけ?または...?

0 投票する
3 に答える
2299 参照

cdi - CDI プロデューサー メソッドの使用を強制するにはどうすればよいですか?

ここでの問題の一部は、適切な語彙を使用することです。そのため、用語の単純な問題である可能性があることを前もってお詫びします。

Personインターフェイスと、そのインターフェイスを実装するクラスPersonBeanがあるとします。

さらに@Produces、 を返す (注釈付きの)プロデューサー メソッドがどこかにあるとしますPerson。内部的には newPersonBeanを返しますが、それはここにもありません。

最後に、次のように定義された注入ポイントを持つ別の CDI Bean があるとします。

すべてのbeans.xmlファイルが配置され、Weld または別の CDI-1.0 準拠の環境がブートストラップされていると仮定すると、あいまいな定義エラーが発生します。これは理にかなっています: Weld は myPersonBeanをインジェクションの候補として見つけ (コンストラクターを呼び出すだけでよい)、私のプロデューサー メソッドの出力をインジェクションの候補として見つけます。

私がやりたいことはPerson、このアプリケーションでのインスタンスの生成が常にプロデューサー メソッドを経由するように強制することです。

どこかで何らかの修飾子を発明Personし、その修飾子によって修飾されるインスタンスをプロデューサー メソッドに生成させることができることを理解しています。私がそれを行い、修飾子を含むように注入ポイントを変更すると、明らかにこれらの修飾された注入可能オブジェクト (つまり、私のプロデューサー メソッド) のソースは 1 つしかないため、出来上がり、問題は解決しました。

しかし、偽の修飾子を発明したくないとします。(これが事実だと言っているわけではありません。問題をより深く理解しようとしているだけです。) どのような選択肢がありますか? 私は持っていますか?CDIに見えないようにするために を@Typed(Object.class)つければいいのかな…。PersonBeanPerson

ドキュメントへのポインタ、またはこれを理解するためのより良い方法など、あらゆるアイデアを歓迎します。ありがとう。

0 投票する
1 に答える
391 参照

cdi - オブジェクトがプロデューサーメソッドによって生成された場合、そのイニシャライザーメソッドは自動的に呼び出されますか?

<code>Personのインスタンスを作成するプロデューサーメソッドがあります。

このメソッドが作成するインスタンスは型PersonBeanであり、明らかに実装されていPersonます。

このクラスには、初期化メソッドが含まれています。

BeanアーカイブのクラスパスにもSomething実装があり、ここに注入する候補となるはずです。

この実装は、プロデューサーメソッドで生成されていない別のオブジェクトの適切に注釈が付けられたフィールドに注入されることを確認したので、Weldがそれを検出していること、有効であるなどを確認しています。

私のプロデューサーメソッドの戻り値に、 Weld/コンテナーが提供する依存性注入適用されるかどうかについての仕様は(私には)明確ではありません。

私は確かに、この初期化メソッドが自動的に呼び出されないことを観察しています。

要約すると、私の質問は、オブジェクトを生成している場合、それは私のプロデューサーメソッドがそのオブジェクトのすべての初期化を処理する必要があることを意味しますか、それとも(代わりに私が期待すること)私のプロデューサーメソッドはインスタンス化のみを担当しますか?

0 投票する
2 に答える
471 参照

netbeans - Errai、CDI、Netbeans の警告、beans.xml

「満たされていない依存関係: 注入ポイントに一致する Bean がありません」に関するこれらの厄介な Netbeans 警告を削除する簡単な方法はありますか? 問題は、GWT および Errai パッケージに beans.xml ファイルが含まれていないため、Bean アーカイブとしての資格がないため、アクティブ化された Bean が含まれていないことです。

これらのパッケージを外部から「アップグレード」する方法はありますか。それらを再構築または変更せずに?

その点で、Errai は JSR-299 に準拠していないようです。

前もって感謝します!

0 投票する
2 に答える
1347 参照

java - Weld @Inject ApplicationScope Bean は、すべての注入ポイントで新しいインスタンスを作成します

Weld を使用して CDI を理解しようとしています。次の構造を取得しました。

FooFacade も @ApplicationScope です。

アプリの起動時に MainFacade インスタンス = 1 を取得しました。それを他のクラス (GWT RPC サーブレット) に挿入し、mainFacade.getFooFacade() を呼び出すと、MainFacade の新しいインスタンスが fooFacade の新しいインスタンスと共に作成されます。

Weld は、どこに注入しても同じアプリケーション スコープ Bean のインスタンスを返すと考えました。私が間違っていることは何ですか?