0

問題

Java Web Start で起動し、GlassFish 3.1.2.2 (ビルド 5) サーバーから起動したアプリケーション クライアントにエンタープライズ Java Bean を注入する@EJB..要件が満たされている限り動作します [下部の注を参照]。しかし、 を使用して何かを注入する@Injectと、注入しようとしているリソースの種類が何であれ、すべて失敗します。NullPointerException注入されたリソースを使用しようとすると、エラーが発生するため、失敗したことはわかっています。これは、注釈プロセッサが を完全に忘れていることを示してい@Injectます。

@EJB完璧に動作するのにまったく動作しないことに興味をそそられるだけでなく@Inject、このインジェクションの「サイレント エラー」はJava EE 6 仕様に違反しているに違いないと考えます。仕様書の 69 ページには次のように記載されています。

コンテナーが注入に必要なリソースを見つけられない場合、クラスの初期化は失敗し、クラスはサービスに入れられません。

この問題、GlassFishのバグに関連しているか、バグの表現である可能性があります。

私の最終目標..

.. API を実装から分離することで、パフォーマンス テストやアプリケーションのプロファイリングを行うときに、さまざまな実装を試す作業がはるかに簡単になります。しかし、この設計パターンをアプリケーション クライアントで再現することはほとんど不可能だと思いますか? 私の当面のアプローチは、クラス内のすべての実装の新しいインスタンスを作成するMainか、ファクトリを使用することです。もちろん、最善の解決策は修飾子を使用することです!

: アプリケーション クライアントでのインジェクションの要件は、コンポーネントに対して CDI を有効にする必要があることです (パッケージにはファイルbeans.xmlが含まれている必要があります。注釈に慣れている場合は、ほとんどの場合空です!)。アプリケーション クライアントでの CDI のサポートは、実際にはオプションです。実装固有。さらに、CDI が有効でサポートされている場合、アプリケーション クライアント コンテナはクライアントの起動中にのみアクティブにできるため、リソースをクラスに注入する必要がありMain、フィールドがstatic.

4

0 に答える 0