Cosminexus V9 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)

[目次][用語][索引][前へ][次へ]

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

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

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

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

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

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

アノテーションの参照抑止機能は,Servlet 2.5以降の場合に使用できます。EJB 3.0以降の場合,アノテーション参照抑止機能は使用できません。

Servlet 2.5以降の場合の動作を次に示します。

Servlet 2.5以降の場合
Java EE 5以降のアプリケーションでは,標準仕様でアノテーションを使用できます。Servlet 2.5以降のDDには,アノテーションの参照を抑止するための属性であるmetadata-complete属性が追加されています。metadata-complete属性を使用して,モジュール単位にアノテーションの参照を抑止できます。
ただし,DDが省略されているアプリケーションの場合は,モジュール定義情報を読み込むために必ずアノテーションが参照されるため,参照抑止機能は使用できません。
モジュール単位のアノテーション参照抑止機能は,Java EE 5以降の標準仕様に準拠した機能です。
参考
アプリケーションサーバでは,EJB 3.0のDDには<display-name>要素のほか,インターセプタおよびアプリケーション例外に関する定義だけが定義できます。EJB 3.1ではこれらに加え,<module-name>要素が定義できますが,それ以外のEJB 3.0またはEJB 3.1のモジュール定義情報は,すべてアノテーションで定義する必要があります。このため,EJB 3.0以降ではアノテーション参照抑止機能を使用できません。
注意
アノテーションを記述したEJB 2.1またはServlet 2.4のモジュールを含むJ2EEアプリケーションがインポートされた状態で,アノテーション参照抑止機能を無効から有効に変更した場合,次の現象が発生します。
  • 属性ファイルにアノテーション情報が出力される
  • @Resourceまたは@Resourcesを使用していた場合,属性ファイルの設定およびJ2EEアプリケーションの開始に失敗する

(2) 適用範囲

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

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

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

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

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

注※1 EJB 2.1およびSevlet 2.4でのアノテーションの利用は,旧バージョンとの互換用の機能です。詳細は,マニュアル「アプリケーションサーバ 機能解説 互換編」の「5.4 EJB 2.1とServlet 2.4でのアノテーションの利用」を参照してください。

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

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

注※4 Servlet3.0で追加された@HandlesTypesアノテーションはアノテーション参照抑止機能の対象になりません。


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

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

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

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

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