2011-12-23 9 views
4

私はJBoss 6.1と完全にEJB 3.1に準拠していないものを使用しています。今のところ、@EJB経由でStrutsアクションクラス(またはJava EEコンテナ管理以外のクラス)にEJBをインジェクトすることはできませんが、EJB 3.1仕様が完全に実装されている場合は可能でしょうか?EJB 3.1:コンテナで管理されていないリソースにBeanを注入できますか?

もしそうでない場合は、近いうちにパフォーマンス上の理由によりこれを実行することは実行できませんか?

答えて

4

管理対象以外のオブジェクトにコンテナを挿入することはできません。

オブジェクトをインジェクションできるようにするには、コンテナはオブジェクトのライフサイクルを管理するか、少なくともライフサイクルの管理に参加する必要があるため、オブジェクトを早期に保持して注入。オブジェクトが作成され、コンテナにさらされることなく使用されている場合(StrutsアクションBeanが想像しているように)、コンテナには何も挿入する機会はありません。コンテナは魔法ではありません.JVM上に作成されたオブジェクトを検出して、それを実行するだけではありません。

ミッコの答えには、注射可能なオブジェクトの種類の良いリストがあります。行動の豆がそれらの1つでなければ、サイコロ、私は恐れています。

ここで言いましたように、トンネルの終わりには光があります。注射を扱うStruts用の拡張を書くことは可能かもしれません。 @EJBと@Resourceの注入は、特定のJNDIルックアップにかなり簡単に対応しています。エクステンションは、注釈付きフィールドを反射的に探し、対応するJNDIルックアップを実行して結果を注入することができます。 CDI注入は、特に拡張機能の作成を目的としたAPIを備えているので、さらに簡単です。このすべてを行う例については、Stripes injection enricherをご覧ください。これは、Stripes Webフレームワークに@EJB、@Resource、および@Injectのサポートを追加しています。

3

仕様を完全に実装する予定はありません。これは、Java EE仕様v6(Java EE 6の一部のサブ仕様の一種であるEJB 3.1)で説明されています。

  • サーブレット::次のコンポーネントは、(仕様、コンポーネントのクラス)を注入することができますサーブレット、サーブレットフィルタ、イベントリスナーを
  • JSP:タグハンドラ、タグライブラリのイベントリスナー
  • JSFは:スコープの管理対象Bean
  • JAX-WS:サービスエンドポイント、ハンドラ
  • EJB:豆、インターセプター
  • 管理Bean:管理対象Bean
  • CDI:CDIスタイルの男老人豆、デコレータ
  • のJava EEプラットフォーム:言及した仕様で、より深さで説明したメインクラス(静的)、ログインコールバックハンドラ

、ページ68-71。

関連する問題