アプリケーション・デプロイメント時のアノテーション検索の削減
多くのクラスを含んでいて、アノテーション処理が使用可能になっている ("metadata-complete" とマークされていない) エンタープライズ・アプリケーションは、デプロイに余分な時間がかかります。余分な時間が必要なのは、Java™ EE 5 で導入されたアノテーションが含まれていないかアプリケーション・バイナリーをスキャンするためです。 スキャンの対象になるクラスを制限する追加オプションがない場合、モジュールに対してスキャンが使用可能にされていると、そのモジュール内のすべてのクラスがスキャンされなければなりません。特定のモジュール内のクラスのうち少数のみにアノテーションがある場合でも、すべてのクラスのスキャンが必要です。
始める前に
デプロイメントの効率を高めるため、高速バイトコード・スキャン・テクノロジーが使用されます。しかし、 アノテーションのスキャンの対象となるクラスを限定するほうが、もっと高いデプロイメント効率を達成できます。
モジュールが metadata-complete とマークされていると、それはモジュール全体に適用されます。アノテーション処理が必要な場合、 モジュールを metadata-complete とマーク付けることはできません。それに加えて、モジュールを metadata-complete とマーク付けるとモジュールのスキャンが行われなくなり、 それが原因となって EJB または Web サービス・アノテーションを使用する Web モジュールの問題につながります。
Web モジュール・アーカイブ (WAR ファイル) の JAR ファイルがアプリケーション・ライブラリー・フォルダーに移されることがあるかもしれません。 しかし、WAR ファイルの移動は、Web モジュールのカプセル化の破壊につながる恐れがあるため、または、異なる JAR ファイルを必要とする複数のモジュールが存在するために、可能でないこともあります。
こういった制約を克服し、 デプロイメントの時間を減らすために、IBM® WebSphere® Application Server では、アノテーションのスキャンの対象となるクラスを制限するためのオプションが用意されています。
製品サーバーで、Java プラットフォーム Enterprise Edition (Java EE) 5 以降をサポートするアプリケーションをインストールします。デプロイメントが非常に遅く、アプリケーションを今後再びデプロイする予定があり、 かつ、アノテーション処理に使用可能になっているモジュールがアプリケーションに含まれている場合、このトピックの手順を実行して、アノテーションのスキャン対象となるクラスの数を減らしてください。
このタスクについて
この製品には、アノテーション検索対象となるクラスの数を減らすための構成可能なフィルター機能があります。 以下の 4 つのプロパティー (またはマニフェスト属性) を通して、アノテーション処理でどのモジュールまたは Java パッケージを無視するのかを指定できます。
- Ignore-Scanning-Archives
- Ignore-Scanning-Packages
- Include-Scanning-Archives
- Include-Scanning-Packages
これらのプロパティーは、app_server_root/properties 内の amm.filter.properties で指定するか、またはマニフェスト属性として指定することができます。
- com.ibm.ws.amm.scan.context.filter.archives
- com.ibm.ws.amm.scan.context.filter.packages
- com.ibm.ws.amm.scan.context.include.archives
- com.ibm.ws.amm.scan.context.include.packages
これらのオプションを使用して、アノテーションのスキャンの対象とするクラスを限定します。除外されるクラスの数に比例してパフォーマンスが向上します。アノテーション・データをまったく含んでいないクラスを処理から除外してください。
通常、 フィルター操作はアーカイブ全体に対して実行されます。よくあるフィルター操作の例は、 アノテーション・データを含んでいない WAR に組み込まれているユーティリティー JAR ファイルをフィルター操作することです。
Ignore-Scanning-Archives プロパティーおよび Ignore-Scanning-Packages プロパティーを使用して、 アノテーション処理中に無視される、クラスのサブセットを指定します。Ignore-Scanning-Archives で指定されたアーカイブ内のすべてのクラスが、 アノテーション処理中にスキップされます。Ignore-Scanning-Packages で指定されたパッケージ内のすべてのクラスも、 アノテーション処理中にスキップされます。
Include-Scanning-Archives プロパティーおよび Include-Scanning-Packages プロパティーを使用して、 アノテーション処理中にスキャンされる、クラスのサブセットを指定します。いずれかのプロパティーが指定されている場合、 包含されるクラスのみがスキャンされ、その他のクラスは無視されます。
これらのプロパティーの値で、アノテーション処理範囲の粗い制御と細かい制御の両方を行うことができます。Ignore-Scanning-Archives では Ignore-Scanning-Packages よりも粗い制御を行うことができ、同様に、Include-Scanning-Archives では Include-Scanning-Packages よりも粗い制御が可能です。
これら 4 つすべてのプロパティーの構文は、コンマ区切り値規則に従います。 ワイルドカードや正規表現を使用することはできず、値には大/小文字の区別があります。
包含と除外の両方のプロパティーを同時に使用することは通常はありませんが、サポートはされています。包含プロパティーが除外プロパティーと一緒に指定されている場合、 クラスが処理対象として選択されるのは、包含されていて、かつ、除外されていない場合です。Ignore-Scanning-Archives と Include-Scanning-Archives の両方が指定されている場合、アノテーション処理中にクラスがスキャン対象になるのは、そのクラスが Include-Scanning-Archives で指定されたアーカイブ内にあり、Ignore-Scanning-Archives で指定されたアーカイブ内にない場合のみです。同様に、 Ignore-Scanning-Archives と Include-Scanning-Packages の両方が指定されている場合、アノテーション処理中にクラスがスキャン対象になるのは、そのクラスが Include-Scanning-Packages で指定されたパッケージ内にあり、 Ignore-Scanning-Packages で指定されたアーカイブ内にない場合のみです。
amm.filter.properties ファイルを使用して指定されたオプションは、 プロファイルに対してグローバルです。そのプロファイルによって起動されるプロセスに関わるすべてのアプリケーションが、指定されたオプションを使用します。 システム・プロパティーとして指定されたオプションは、プロパティーが設定されたプロセスに対してグローバルです。そのプロセスに関わるすべてのアプリケーションが、指定されたオプションを使用します。
- アプリケーション (EAR ファイル)
- モジュール (WAR/RAR/JAR ファイル)
- Web フラグメント (JAR ファイル)
複数の有効範囲で指定されたマニフェスト属性は、 追加的に扱われます。amm.filter.properties を使用して指定されたオプション、 システム・プロパティー、およびマニフェスト属性は、追加的に扱われます。
以下のいずれかの手順に従って、管理者はデフォルト値のセットを変更でき、これららを大きくすることができます。
手順
次のタスク
アプリケーションを再びインストールします。 デプロイメントが依然として遅い場合は、無視するモジュールや Java パッケージをさらに指定してください。