2.15.4 インターセプタの実行順序
インターセプタの実行順序は,デフォルトでは次の規則に従って決定されます。
-
EJB 3.0仕様の実行順序
EJB 3.0仕様で次の実行順序が規定されています。
-
デフォルトインターセプタ
-
クラスレベルインターセプタ
-
メソッドレベルインターセプタ
-
Beanクラスに指定されたインターセプタメソッド
-
-
同一レベルのインターセプタが複数ある場合の規則
同一レベルのインターセプタが複数ある場合,アノテーション,またはDDで記述された順番に実行されます。
-
インターセプタクラスに親クラスがあり,親クラスにインターセプタメソッドが定義されている場合
親クラスから実行されます。
-
上位レベルインターセプタの呼び出し抑止の定義による規則
上位レベルのインターセプタの呼び出しを抑止する定義を指定した場合,指定されたレベルのインターセプタは呼び出されません。
-
<interceptor-order>タグでの順序制御
次のビジネスメソッドを実行する場合,DDまたは属性ファイルの<interceptor-order>タグを定義したインターセプタよりも上位のインターセプタは呼び出されません。
-
<interceptor-order>タグで実行順序を定義したクラスレベルインターセプタが適用されている,Enterprise Beanクラスのビジネスメソッド
-
<interceptor-order>タグで実行順序を定義したメソッドレベルインターセプタが適用されているビジネスメソッド
<interceptor-order>タグを使用しているインターセプタの中で,いちばん低いレベルのインターセプタの定義とそれより下位のレベルのインターセプタが実行されます。
-
なお,ここで示したデフォルトのインターセプタの実行順序は,次の方法で変更できます。
-
@ExcludeDefaultInterceptorsアノテーションまたはDDの<exclude-default-interceptors>タグでデフォルトインターセプタクラスの実行を対象外にできます。
-
@ExcludeClassInterceptorsアノテーションまたはDDの<exclude-class-interceptors>タグでクラスレベルインターセプタクラスの実行を対象外にできます。
-
すべてのレベルのインターセプタクラスについて,DDの<interceptor-order>タグを記述することで順番を入れ替えることができます。
これらの規則と,DDによるアノテーションの上書きの規則を組み合わせた実行順序を(1)〜(4)で説明します。DDによるアノテーションの上書きについては,マニュアル「アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)」の「16.6.2 DDによるアノテーションの上書き」を参照してください。
- 〈この項の構成〉
(1) デフォルトインターセプタ,およびクラスレベルインターセプタの呼び出し抑止の定義が指定されている場合
デフォルトインターセプタ,およびクラスレベルインターセプタの呼び出し抑止の定義が指定されている場合の,インターセプタの実行順序を次の表に示します。この表では,各項番の「<interceptor-order>の使用」に○×で示した組み合わせの場合の実行順序を,「インターセプタの実行順序」のDDまたはアノテーションの表記の前にある数字で示しています。
項番 |
<interceptor-order>の使用 |
インターセプタの実行順序 |
|||||
---|---|---|---|---|---|---|---|
デフォルト |
クラスレベル |
メソッドレベル |
デフォルト |
クラスレベル |
メソッドレベル |
インターセプタメソッド |
|
1 |
○ |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
2 |
○ |
○ |
× |
− |
− |
1. アノテーション 2. DD |
3. アノテーション |
3 |
○ |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
4 |
○ |
× |
× |
− |
− |
1. アノテーション 2. DD |
3. アノテーション |
5 |
× |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
6 |
× |
○ |
× |
− |
− |
1. アノテーション 2. DD |
3. アノテーション |
7 |
× |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
8 |
× |
× |
× |
− |
− |
1. アノテーション 2. DD |
3. アノテーション |
(2) デフォルトインターセプタの呼び出し抑止の定義が指定されている場合
デフォルトインターセプタの呼び出し抑止の定義が指定されている場合の,インターセプタの実行順序を次の表に示します。この表では,各項番の「<interceptor-order>の使用」に○×で示した組み合わせの場合の実行順序を,「インターセプタの実行順序」のDDまたはアノテーションの表記の前にある数字で示しています。
項番 |
<interceptor-order>の使用 |
インターセプタの実行順序 |
|||||
---|---|---|---|---|---|---|---|
デフォルト |
クラスレベル |
メソッドレベル |
デフォルト |
クラスレベル |
メソッドレベル |
インターセプタメソッド |
|
1 |
○ |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
2 |
○ |
○ |
× |
− |
1. DD |
2. アノテーション 3. DD |
4. アノテーション |
3 |
○ |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
4 |
○ |
× |
× |
− |
1. アノテーション 2. DD |
3. アノテーション 4. DD |
5. アノテーション |
5 |
× |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
6 |
× |
○ |
× |
− |
1. DD |
2. アノテーション 3. DD |
4. アノテーション |
7 |
× |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
8 |
× |
× |
× |
− |
1. アノテーション 2. DD |
3. アノテーション 4. DD |
5. アノテーション |
(3) クラスレベルインターセプタの呼び出し抑止の定義が指定されている場合
クラスレベルインターセプタの呼び出し抑止の定義が指定されている場合の,インターセプタの実行順序を次の表に示します。この表では,各項番の「<interceptor-order>の使用」に○×で示した組み合わせの場合の実行順序を,「インターセプタの実行順序」のDDまたはアノテーションの表記の前にある数字で示しています。
項番 |
<interceptor-order>の使用 |
インターセプタの実行順序 |
|||||
---|---|---|---|---|---|---|---|
デフォルト |
クラスレベル |
メソッドレベル |
デフォルト |
クラスレベル |
メソッドレベル |
インターセプタメソッド |
|
1 |
○ |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
2 |
○ |
○ |
× |
1. DD |
− |
2. アノテーション 3. DD |
4. アノテーション |
3 |
○ |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
4 |
○ |
× |
× |
1. DD |
− |
2. アノテーション 3. DD |
4. アノテーション |
5 |
× |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
6 |
× |
○ |
× |
1. DD |
− |
2. アノテーション 3. DD |
4. アノテーション |
7 |
× |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
8 |
× |
× |
× |
1. DD |
− |
2. アノテーション 3. DD |
4. アノテーション |
(4) 上位レベルインターセプタの呼び出し抑止の定義が指定されていない場合
上位レベルインターセプタの呼び出し抑止の定義が指定されていない場合の,インターセプタの実行順序を次の表に示します。この表では,各項番の「<interceptor-order>の使用」に○×で示した組み合わせの場合の実行順序を,「インターセプタの実行順序」のDDまたはアノテーションの表記の前にある数字で示しています。
項番 |
<interceptor-order>の使用 |
インターセプタの実行順序 |
|||||
---|---|---|---|---|---|---|---|
デフォルト |
クラスレベル |
メソッドレベル |
デフォルト |
クラスレベル |
メソッドレベル |
インターセプタメソッド |
|
1 |
○ |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
2 |
○ |
○ |
× |
− |
1. DD |
2. アノテーション 3. DD |
4. アノテーション |
3 |
○ |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
4 |
○ |
× |
× |
1. DD |
2. アノテーション 3. DD |
4. アノテーション 5. DD |
6. アノテーション |
5 |
× |
○ |
○ |
− |
− |
1. DD |
2. アノテーション |
6 |
× |
○ |
× |
− |
1. DD |
2. アノテーション 3. DD |
4. アノテーション |
7 |
× |
× |
○ |
− |
− |
1. DD |
2. アノテーション |
8 |
× |
× |
× |
1. DD |
2. アノテーション 3. DD |
4. アノテーション 5. DD |
6. アノテーション |