6

モジュールを含む EAR があります。

  • foo-api.jar
  • foo-impl.jar
  • インターセプター.jar

foo-api には次のものがあります。

@Local
FooService // (interface of a local stateless session bean)

foo-impl には次のものがあります。

@Stateless
FooServiceImpl implements FooService //(implementation of the foo service)

私が望むinterceptor.jarで

public class BazInterceptor {

  @EJB
  private FooService foo;

  @AroundInvoke
  public Object intercept( final InvocationContext i) throws Exception {
    // do someting with foo service
    return i.proceed();
  }

質問は:

Java EE 5 準拠のアプリケーション サーバー (JBoss 5 など) はインターセプターに挿入されますか? いいえの場合、セッション Bean にアクセスするための適切な戦略は何ですか?

考慮する:

  • デプロイメントの順序 / 競合状態
4

2 に答える 2

7

はい、たとえばAn Introduction to the Java EE 5 Platform記事 (太字は私のもの) で説明されているように、インジェクションはインターセプターで発生する必要があります。

依存性注入によるリソースへのより簡単なアクセス

依存性注入は、オブジェクトの依存性がそのオブジェクトの外部のエンティティによって自動的に提供されるパターンです。オブジェクトは、これらのリソースを明示的に要求する必要はありません (たとえば、ネーム サービスでそれらを検索するなど)。Java EE 5 プラットフォームでは、コンポーネントが必要とするすべてのリソースに依存性注入を適用して、リソースの作成と検索をアプリケーション コードから効果的に隠すことができます。依存性注入は、Java EE 5 テクノロジ全体 (EJB ソフトウェア コンテナー、Web コンテナー、およびクライアント) に適用できます。

リソースの注入を要求するために、コンポーネントは@Resource アノテーションを使用します。一部の特殊なリソースの場合は、@EJBおよび @WebServiceRefアノテーションを使用します。以下は、注入できる多くのリソースの一部です。

  • SessionContext物体
  • DataSources物体
  • UserTransaction
  • EntityManagerインターフェース
  • TimerServiceインターフェース
  • その他のエンタープライズ Bean
  • ウェブサービス
  • メッセージ キューとトピック
  • リソース アダプタの接続ファクトリ
  • 環境エントリ (文字列、整数など)

リソース注入は、任意のコンポーネント クラス、つまりライフサイクルがコンテナーによって管理される任意のクラスから要求できます。EJB ソフトウェア コンテナでは、インジェクションをサポートするコンポーネントは次のとおりです。

  • EJB テクノロジー コンポーネント
  • インターセプター
  • Java API for XML Web Services (JAX-WS) および Java API for XML-based RPC (JAX-RPC) のメッセージ ハンドラー

Web コンテナーでは、インジェクションをサポートするコンポーネントは次のとおりです。

  • サーブレット、サーブレット フィルター、イベント リスナー
  • タグ ハンドラー、タグ ライブラリ イベント リスナー
  • 管理された Bean

クライアント コンテナーでは、メイン クラスとloginコールバック ハンドラー コンポーネントがインジェクションをサポートします。

JBoss EJB 3.0 チュートリアルのEJB インターセプターセクションも参照してください。

Bean クラスと同様に、インターセプターは依存性注入のターゲットになる可能性があります。これがどのように機能するかの形式は同じであり、インジェクションはインターセプターがバインドされている Bean と同じ ENC で機能します。

...

インターセプターは、バインドされている Bean と同じライフサイクルに従うことに注意してください。インターセプターは Bean インスタンスの作成と同時に作成され、依存性注入は最初のビジネス メソッドが呼び出される前に発生します。

資力

于 2010-11-20T15:07:35.340 に答える
-1

私の経験では、インジェクションはマネージド クラス (EJB (エンティティ、セッション、またはメッセージ) およびサーブレット) でのみ発生する可能性があることが示されています。

于 2009-09-11T15:08:00.663 に答える