16.5.1 アノテーション参照抑止機能の目的と適用範囲
ここでは,アノテーション参照抑止機能の目的と適用範囲について説明します。
- 〈この項の構成〉
(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) 適用範囲
アノテーション参照抑止機能の適用範囲は,アノテーションを含むモジュールの種類によって異なります。
アノテーション抑止機能の適用範囲を次の表に示します。
モジュールのバージョン |
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 |
モジュール単位の設定はDDのmetadata-complete属性で設定します。J2EEサーバ単位の設定は,ejbserver.deploy.applications.metadata_completeプロパティで設定します。モジュール単位の設定と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 |
× |
× |
× |