第16章 コンテナインタープリター

16.1. コンテナーインターセプターについて

JSR 318, Enterprise JavaBeans 3.1 仕様で定義された標準的な Java EE インターセプターは、コンテナーがセキュリティーコンテキスト伝播と、トランザクション管理、他のコンテナーにより提供された呼び出し処理を完了した後に実行されることが期待されます。これは、特定のコンテナー固有インターセプターが実行される前にユーザーアプリケーションが呼び出しをインターセプトする必要がある場合に問題となります。
JBoss Enterprise Application Platform 6.0 より前のリリースでは、サーバーサイドインターセプターを呼び出しフローに組み込み、コンテナーが呼び出し処理を完了する前にユーザーアプリケーション固有ロジックを実行することができました。JBoss Enterprise Application Platform 6.1 には、この機能が実装されるようになりました。この実装により、標準的な Java EE インターセプターをコンテナーインターセプターとして使用できるようになります (3.1 バージョンの ejb-jar デプロイメント記述子に対して ejb-jar.xml ファイルで許可されたのと同じ XSD 要素が使用されます)。
コンテナーインターセプターをインターセプターチェーンに配置

EJB に設定されたコンテナーインターセプターは、JBoss Enterprise Application Platform 6.1 がセキュリティーインターセプター、トランザクション管理インターセプター、他のサーバーにより提供されたインターセプターを提供する前に実行されることが保証されます。これにより、ユーザーアプリケーション固有コンテナーインターセプターは呼び出しが続行される前に関連するすべてのコンテキストデータを処理または設定できます。

コンテナーインターセプターと Java EE インターセプター API の違い

コンテナーインターセプターは Java EE インターセプターに似ていますが、API セマンティクスでいくつかの違いがあります。たとえば、コンテナーインターセプターが javax.interceptor.InvocationContext.getTarget() メソッドを呼び出すことは禁止されています。これは、EJB コンポーネントがセットアップまたはインスタンス化されるよりかなり前にこれらのインターセプターが呼び出されるためです。