web-dev-qa-db-ja.com

Java EEのインターセプターとは何ですか?

Java EE。私はJava EE仕様を読みましたが、それについて少し混乱しています。私に提供してください。私の概念をクリアすることができるいくつかの便利なリンクまたはチュートリアル。

39
Umair

インターセプターは、ビジネスロジックから、ロギング、監査、セキュリティなどの分野横断的な懸念を実装するために使用されます。

Java EE 5、インターセプターはEJBでのみ許可されました。InJava EE 6、インターセプターは独自の新しい仕様になり、より高いレベルで抽象化されました。プラットフォームのより広範な仕様セットに、より一般的に適用できること。

これらは、関連付けられたターゲットクラスでの呼び出しとライフサイクルイベントをインターセプトします。基本的に、インターセプターは、ターゲットクラスのビジネスメソッドが呼び出されたときにメソッドが呼び出されるクラスであり、Beanを作成/破棄するメソッドなどのライフサイクルイベントが発生するか、EJBタイムアウトメソッドが発生します。 CDI仕様は、インターセプターバインディングを使用してインターセプターをBeanに関連付けるためのタイプセーフメカニズムを定義しています。

で動作するコードサンプルを探します。

https://github.com/arun-gupta/javaee7-samples/tree/master/cdi/interceptors

Java EE 7は、新しい@TransactionalアノテーションをJava Transaction APIに導入しました。これにより、EJBの外でコンテナー管理トランザクションを使用できます。このアノテーションはインターセプターバインディングとして定義され、 Java EEランタイム。@ Transactionalの作業サンプルは次の場所にあります。

https://github.com/arun-gupta/javaee7-samples/tree/master/jta/transaction-scope

47
Arun Gupta

インターセプターは、マネージドBeanにAOP機能を追加に使用されます。

@Interceptorアノテーションを使用して、Interceptorをクラスにアタッチできます。 クラス内のメソッドが呼び出されるたびに、接続されたインターセプターはそのメソッド呼び出しをインターセプトし、インターセプターメソッドを実行します。

これは、@ AroundInvokeアノテーションを使用して実現できます(以下の例を参照)。

Method Interceptors

@AroundConstructアノテーションを使用して、クラスのライフサイクルイベント(オブジェクトの作成、破棄など)をインターセプトできます。

主な違い InterceptorとServlet Filtersの違いは、WebContextの外でInterceptorを使用できますが、フィルターはWebアプリケーションに固有のものです。

インターセプターの一般的な用途は、ロギング、監査、およびプロファイリングです。

より詳細な紹介については、この記事を読むことができます。 https://abhirockzz.wordpress.com/2015/01/03/Java-ee-interceptors/

この定義が気に入っています。インターセプターは、EJBメソッドの呼び出しをインターセプトするコンポーネントです。これらは、EJBにアクセスするときの監査およびロギングに使用できます。

別の状況では、クライアントがデータベース内の特定のオブジェクトでトランザクションを実行する権限または認可を持っているかどうかを確認する必要がある状況で使用できます。さて、ここでインターセプターが役立ちます。クライアント/ユーザーがそのデータベースオブジェクトまたはEJBでそのメソッドを呼び出すことができるかどうかを確認することにより、クライアント/ユーザーがその権限を持っているかどうかを確認できます。

ただし、次の article と次の tutorial Java EE設定/環境でそれらがどのように使用されるかのアイデアを得るため。

10
blackpanther