インターセプタは,アノテーションで指定するか,DDまたは属性ファイルを使用してEJB-JARの属性として設定します。
デフォルトインターセプタは,EJB-JARに含まれるすべてのコンポーネントに適用されるインターセプタです。ここでは,DDを使用したデフォルトインターセプタを設定する方法,および実行環境でEJB-JAR属性ファイルを使用してデフォルトインターセプタを設定する方法について説明します。
DDで,<ejb-jar>タグ下の<interceptor-binding>タグを記述することで,デフォルトインターセプタの情報を指定できます。
<interceptor-binding>タグ下に指定する要素を次の表に示します。
表2-46 DDを使用する場合に<interceptor-binding>タグ下に指定する要素(デフォルトインターセプタ)
タグ名 | 必須/任意 | 指定内容 |
---|---|---|
<description> | 任意 | 任意の情報を指定します。 |
<ejb-name> | 必須 | "*"(ワイルドカード)を指定します。 |
<interceptor-class> | 必須 | 要素にインターセプタクラスのクラス名を指定します。 |
これ以外のタグで指定した要素の値は,反映されません。
デフォルトインターセプタを使用する場合のDDの記述例を次に示します。
<ejb-jar> |
この記述例では,デフォルトインターセプタクラスとして,「test.ejb30.MyDefaultIC」と「test.ejb30.MyDefaultIC2」の二つのクラスを指定しています。
<interceptor-class>タグでのクラス名の指定方法は,EJB 3.0仕様に準じます。次の規則に従って指定してください。
クラスレベルインターセプタは,指定したクラスに適用されるインターセプタです。ここでは,DDを使用したクラスレベルインターセプタを設定する方法,および実行環境でEJB-JAR属性ファイルを使用してクラスレベルインターセプタを設定する方法について説明します。
DDで,<ejb-jar>タグ下の<interceptor-binding>タグを記述することで,クラスレベルインターセプタの情報を指定できます。
<interceptor-binding>タグ下に指定する要素を次の表に示します。
表2-47 DDを使用する場合に<interceptor-binding>タグ下に指定する要素(クラスレベルインターセプタ)
タグ名 | 必須/任意 | 指定内容 |
---|---|---|
<ejb-name> | 必須 | EJB名を指定します。 |
<interceptor-class> | 必須 | 要素にインターセプタクラスのクラス名を指定します。 |
なお,<method>タグには要素を指定しません。
メソッドレベルインターセプタは,指定したビジネスメソッドに適用されるインターセプタです。ここでは,DDを使用したメソッドレベルインターセプタを設定する方法,および実行環境でEJB-JAR属性ファイルを使用してメソッドレベルインターセプタを設定する方法について説明します。
DDで,<ejb-jar>タグ下の<interceptor-binding>タグを記述することで,メソッドレベルインターセプタの情報を指定できます。
<interceptor-binding>タグ下に指定する要素を次の表に示します。
表2-48 DDを使用する場合に<interceptor-binding>タグ下に指定する要素(メソッドレベルインターセプタ)
タグ名 | 必須/任意 | 指定内容 |
---|---|---|
<ejb-name> | 必須 | EJB名を指定します。 |
<interceptor-class> | 必須 | 要素にインターセプタクラスのクラス名を指定します。 |
<method-name> | 必須 | 要素にメソッド名を指定します。 |
<method-params> | 任意 | 要素にメソッドの引数リストを指定します。 |
<method-name>タグにビジネスメソッドを指定し,<method-params>タグの指定値を省略した場合,または<method-params>タグに引数リストを指定した場合の,メソッドレベルインターセプタが定義されるビジネスメソッドの範囲を次の表に示します。なお,<method-name>タグに"*"(ワイルドカード)を指定した場合,メソッドレベルインターセプタの定義は使用されません。
表2-49 メソッドレベルインターセプタが定義されるビジネスメソッドの範囲
<method-params>タグの指定値 | メソッドレベルインターセプタが定義されるビジネスメソッドの範囲 |
---|---|
省略する | メソッド名が完全一致したすべてのビジネスメソッドに対してインターセプタが定義されます。 |
引数リストを指定する | メソッド名と引数リストが完全一致したビジネスメソッドに対してインターセプタが定義されます。 引数リストを指定した場合,アノテーションで指定した情報をDDで上書きできます。 |
ビジネスメソッドが実行される際に使用するメソッドレベルインターセプタの定義は,次の順序で決定されます。
なお,実行するビジネスメソッドが,<method-name>タグに指定したメソッド名と<method-params>タグに指定した引数リストが完全一致する定義,および<method-name>タグに指定したメソッド名が一致し,<method-params>タグに引数リストを指定しない定義の両方に該当する場合は,メソッド名と引数リストが完全一致する定義が使用されます。
また,アノテーションで指定されたメソッドレベルインターセプタは,メソッド名と引数リストが完全一致する定義として扱われます。アノテーションで指定されたメソッドレベルインターセプタをDDで上書きする場合は,メソッド名と引数リストが完全一致する定義でDDに記載する必要があります。