11.5.1 アノテーション参照抑止機能の目的と適用範囲

ここでは,アノテーション参照抑止機能の目的と適用範囲について説明します。

<この項の構成>
(1) アノテーション参照抑止機能の目的
(2) 適用範囲

(1) アノテーション参照抑止機能の目的

アノテーション参照抑止機能は,J2EEアプリケーション中のアノテーションの参照(解析処理)を実施するかどうかを設定する機能です。モジュール内のアノテーションの有無を判断するためには,アプリケーションの解析が必要です。しかし,すべてのアプリケーションを解析すると,アノテーションを使用していないアプリケーションの場合,不要なオーバーヘッドが発生します。また,リソースやほかのアプリケーションを参照するアプリケーションの場合,アノテーション解析時にクラスファイルの参照エラーが発生して,デプロイに失敗することがあります。

アノテーション参照抑止機能を使用すると,アノテーションを使用しない場合に,アノテーションの解析処理を抑止することができます。

アノテーションの参照を抑止する範囲および抑止方法は,EJB 2.1またはServlet 2.4の場合と,Servlet 2.5の場合で異なります。なお,アプリケーションサーバでは,EJB 3.0の場合,アノテーション参照抑止機能は使用できません。

EJB 2.1またはServlet 2.4の場合
EJB 2.1またはServlet 2.4でのアノテーションの使用は,アプリケーションサーバで拡張された機能です。DDだけでmetadata情報が完結している,標準仕様に準拠したJ2EEアプリケーションの場合,アノテーションの解析処理は不要です。
EJB 2.1またはServlet 2.4の場合,J2EEサーバ単位でアノテーションの参照を抑止できます。J2EEサーバ単位のアノテーション参照抑止機能は,アプリケーションサーバ独自の機能です。
Servlet 2.5の場合
Java EE 5アプリケーションでは,標準仕様でアノテーションを使用できます。Servlet 2.5のDDには,アノテーションの参照を抑止するための属性であるmetadata-complete属性が追加されています。metadata-complete属性を使用して,モジュール単位にアノテーションの参照を抑止できます。
ただし,DDが省略されているアプリケーションの場合は,モジュール定義情報を読み込むために必ずアノテーションが参照されるため,参照抑止機能は使用できません。
モジュール単位のアノテーション参照抑止機能は,Java EE 5の標準仕様に準拠した機能です。
参考
アプリケーションサーバでは,EJB 3.0のDDにはインターセプタだけが定義できます。それ以外のEJB 3.0のモジュール定義情報は,すべてアノテーションで定義する必要があります。このため,EJB 3.0ではアノテーション参照抑止機能を使用できません。

(2) 適用範囲

アノテーション参照抑止機能の適用範囲は,アノテーションを含むモジュールの種類によって異なります。

アノテーション抑止機能の適用範囲を次の表に示します。

表11-11 アノテーション抑止機能の適用範囲

モジュールのバージョンDDの有無と指定内容参照抑止の範囲
J2EEサーバ単位モジュール単位
EJB1.1,2.0DDあり(metadata-complete属性なし)
2.1DDあり(metadata-complete属性なし)※1
3.0DDなし×
DDあり(metadata-complete属性あり)省略×
指定あり×※2
Servlet2.2,2.3DDあり(metadata-complete属性なし)
2.4DDあり(metadata-complete属性なし)※1
2.5DDなし×
DDあり(metadata-complete属性あり)省略×
指定あり×

(凡例)○:有効になる ×:使用できない -:該当しない

注※1 有効にすると,アノテーションを記述したEJB 2.1またはServlet 2.4のモジュールを含むJ2EEアプリケーションは使用できなくなります。

注※2 値にtrueは指定できません。trueを指定した場合,J2EEサーバへのアプリケーションのインポートおよびリデプロイに失敗します。


モジュール単位の設定はDDのmetadata-complete属性で設定します。J2EEサーバ単位の設定は,ejbserver.deploy.applications.metadata_completeプロパティで設定します。モジュール単位の設定とJ2EEサーバ単位の設定の組み合わせた場合にアノテーションが参照されるかどうかを次の表に示します。

表11-12 J2EEサーバ単位の設定とモジュール単位の設定の組み合わせ

モジュールのバージョンモジュール単位の設定J2EEサーバ単位の設定
プロパティの指定なしejbserver.deploy.applications.metadata_completeプロパティ
falsetrue
EJB 2.1,Servlet 2.4設定できない×
EJB 3.0DDなし
DDあり(metadata-complete属性あり)省略
false
true
Servlet 2.5DDなし
DDあり(metadata-complete属性あり)省略
false
true×××

(凡例)○:参照する ×:参照しない -:対象外

注※ DDのmetadata-complete属性にtrueを指定したEJB 3.0を含むアプリケーションは,インポートおよびリデプロイに失敗します。