ユーザーがセッションスコープのマネージドBeanを介してログインする必要があるJava EE 6 Webアプリケーションを構築しています。EJB インターセプターとは何ですか? また、EJB インターセプターはプログラムでどのように役立ちますか? 私はそれらについて読んでいますが、私が読んだ資料は説明が少しばかげているようです. 私のためにそれを平たく言えば誰でも。前もって感謝します
3 に答える
インターセプターは、EJB または任意の CDI Bean のメソッド呼び出しまたはライフサイクル イベントに介入できるオブジェクトです。
一般的な使用法:
- プロファイリング: EJB メソッドの所要時間を測定できます。そのため、ボトルネックが見つかる可能性があります。
- 監査: 誰がいつ EJB メソッドを使用したかを記録します。
- ログ: メソッドが失敗/成功した場合 (または例外をスローした場合) にファイルに書き込みます。また、メソッド呼び出しのパラメーターと戻り値を知ることができます。
- カスタム フレームワーク: 独自のビジネス ルールに基づいてカスタム フレームワークを作成できます。
- ライフ サイクル: たとえば、一部の EJB が特別なリソースを必要とする場合、それらを @PostConstruct に追加し、@PreDestroy 時にリソースを閉じることができます。
- カスタム注入アノテーション: EJB のメソッドを使用する前に、独自のアノテーションを作成し、JNDI を検索してリソースを注入します。
インターセプターは EJB の親友です。
- 共有ライフサイクル: Bean インスタンスとともに作成、破棄、非アクティブ化、およびアクティブ化
- 同じ Java 呼び出しスタック
- インターセプトする EJB と同じ JNDI ENC コンテキスト
- AroundInvoke メソッドの呼び出しは、介入しているメソッドと同じトランザクションおよびセキュリティ コンテキスト内で発生します。
それで、ここにインターセプターがあります。レオナルドがフィルターの方が優れていると述べたように、あなたの目的(ログインページ)のために、インターセプターをツールボックスに保管してください。
Java EE 6 のインターセプターは特に知りませんが、Struts 2 フレームワークのインターセプターは知っていて、実際には同じように見えます。
ポイントは、横方向のタスクをクラス (ロギング、識別、セキュリティなど) に含めるべきではないということです。そのため、インターセプター内に配置することが決定されました。
リクエストが到着したとき、あなたのアクションに到着する前(そして去った後)に、あなたが適切だと思うことを検証、変更、または実行できる他のクラスによってインターセプトされます..
これはプログラミングの良い方法なので、POO はより尊重されます。ビジネスクラスは、存在してはならないコードの断片で汚染されることはなくなり、すべてのアプリケーションからアクセスできるコードの断片でさらに汚染されます。
IMO、この場合、インターセプターはあまり役に立たないと思います。これは、EJB メソッドをラップするために使用され、おそらくこれらのメソッドのほとんどは、ユーザーが既にシステムにログインしている場合にのみ使用できる必要があるためです。許可されたユーザーによって要求されているかどうかに関係なく、すべての EJB メソッドをチェックするのは不要なオーバーヘッドのように思えます。Filter は通常、アプリの使用を制限しようとするときに本当に必要なものです。これは、要求レベルで機能し、そこに Session オブジェクトがある場合にユーザーがログインしているかどうかを確認できるためです。
インターセプターは、プロファイリングや監査などの水平機能に確かに役立ちます。