ヘッダーをスキップ
Oracle Fusion Middleware Oracle WebLogic Server アプリケーションのデプロイメント
11g リリース 1 (10.3.1)
B55511-01
 

目次
目次

戻る
戻る
 
次へ
次へ
 

3 アプリケーションおよびモジュールのデプロイメント準備

以下の節では、アプリケーションのデプロイメントを準備する上で必要となる重要なトピックについて説明します。

デプロイするファイルのパッケージ化

WebLogic Server は、jar ユーティリティまたは Ant の jar ツールを使用してアーカイブ ファイルとしてパッケージ化されたデプロイメント、または展開されたアーカイブ ディレクトリとしてパッケージ化されたデプロイメントをサポートしています。


注意 :

一般に、アプリケーションを管理対象サーバにデプロイするときにアーカイブ ファイルを使用すると、より効率的です。ただし、アプリケーションの再デプロイメントが必要になるため、アプリケーションの更新 (Web コンテンツの更新など) がより難しくなります。

アーカイブ ファイルの使用

アーカイブ ファイルは、アプリケーションまたはモジュールのクラス、静的ファイル、ディレクトリ、およびデプロイメント記述子ファイルをすべて含む単一のファイルです。大半のプロダクション環境において、管理者がデプロイメント用に受け取るアプリケーションは、アーカイブ ファイルとして格納されます。

jar ユーティリティを使用してパッケージ化されたデプロイメント ユニットには、タイプ別に特定のファイル拡張子が付きます。

  • EJB およびクライアント アーカイブは、.jar ファイルとしてパッケージ化される。

  • Web アプリケーションは、.war ファイルとしてパッケージ化される。

  • リソース アダプタは、.rar ファイルとしてパッケージ化される。

  • エンタープライズ アプリケーションは .ear ファイルとしてパッケージ化され、EJB、JDBC、JMS、Web アプリケーション、リソース アダプタなど他の Java EE モジュールを含めることができる。

  • Web サービスは、Java クラスを使用して実装したか、EJB を使用して実装したかに応じて、.war ファイル、.jar ファイルのいずれかとしてパッケージ化できる。通常、.war または .jar ファイルは、さらにエンタープライズ アプリケーション .ear ファイルにパッケージ化されます。

  • Java EE ライブラリは、エンタープライズ アプリケーション (.ear ファイル) または標準の Java EE モジュールとしてパッケージ化される。

  • クライアント アプリケーションおよびオプション パッケージは、.jar ファイルとしてパッケージ化される。

アーカイブ ファイルに加えて、特定の環境についてアプリケーションをコンフィグレーションする別個のファイルである、デプロイメント プランを受け取ることになる場合があります。デプロイメント プランについての詳細は、「プロダクション デプロイメントのためのアプリケーションのコンフィグレーション」で説明しています。

展開されたアーカイブ ディレクトリの使用

展開されたアーカイブ ディレクトリには、JAR アーカイブと同じファイルおよびディレクトリが格納されています。展開されたアーカイブ ディレクトリの使用を選択すると、それ以前にアーカイブされたデプロイメントを手動で復元することが必要になる場合があります。ただし、それらのファイルとディレクトリは、ファイル システム上に直接存在し、jar ユーティリティを使用して単一のアーカイブ ファイルにパッケージ化されていません。

次のような状況下であれば、展開されたアーカイブ ディレクトリからのデプロイを選択できます。

  • デプロイメント後に、エンタープライズ アプリケーションを部分的に更新する必要がある場合。エンタープライズ アプリケーションを展開されたアーカイブ ディレクトリとしてデプロイすると、アーカイブ ファイルを再作成することなく、アプリケーションの個々のモジュールを更新しやすくなります。

  • 定期的に更新される静的ファイルを含む Web アプリケーションまたはエンタープライズ アプリケーションをデプロイする場合。この場合は、アプリケーションを展開されたディレクトリとしてデプロイする方が便利です。そうすればアーカイブを再作成せずに静的ファイルを更新できるからです。

  • アプリケーション コンテキストを通じてファイル システムに直接 I/O を実行する Web アプリケーション (たとえば、自身の一部を動的に編集または更新しようとする Web アプリケーション) をデプロイする場合。この場合、I/O 操作を実行するモジュールには、操作を実行するための物理ファイル システム ディレクトリが必要です。仕様により、アプリケーションをアーカイブとしてデプロイする時点でファイルを取得することはできません。

デプロイメント記述子を含まない展開された EAR ディレクトリをデプロイする場合の Java EE ルール

Java EE 仕様では、アーカイブされた EAR (エンタープライズ アプリケーション アーカイブ) をデプロイメント記述子を含まない状態で Java EE 準拠のサーバにデプロイすることが推奨されています。これを行うには、すべてのコンテナで、妥当なデフォルト値が設定されているか、またはアノテーション付きのクラスが使用されていることが前提となります。WebLogic Server では、この規定のサポートに加えて、展開された EAR ディレクトリをデプロイメント記述子を含まない状態でデプロイすることもできます。

こうしたデプロイメントがディレクトリに適用される場合、EAR とそのネストされたモジュールの特定には一定のルールが使用されます。ルールに従っていないディレクトリは、WebLogic Server Administration Console でもデプロイメント ツールでも、展開された有効な Java EE ディレクトリとして処理されません。

  • WEB-INF/web.xml 記述子のない展開されたアーカイブ Web アプリケーションについては、ディレクトリ名に .war サフィックスが付いている必要がある。

  • META-INF/application.xml 記述子のない展開されたアーカイブ エンタープライズ アプリケーションについては、ディレクトリ名に .ear サフィックスが付いている必要がある。アプリケーション内では、展開された Web モジュールのディレクトリ名に .war サフィックスが付いていなければなりません。同様に、展開された EJB モジュールには .jar サフィックスが、展開された RAR モジュールには .rar サフィックスが必要になります。

  • 展開されたエンタープライズ アプリケーションに META-INF/application.xml 記述子が含まれていない場合は、モジュールがデプロイされる順序が定義されておらず、基底の File.listFiles() メソッド順序に依存する。モジュールを特定の順序でデプロイするには、application.xml 記述子を追加し、その順序でモジュールをリストする必要があります。

アーカイブ ファイルからの展開されたアーカイブ ディレクトリの作成

展開されたアーカイブ ディレクトリとしてデプロイするアーカイブ ファイルがある場合は、jar ユーティリティを使用してアーカイブ ファイルを専用ディレクトリに復元します。次に例を示します。

   mkdir /myapp
   cd /myapp
   jar xvf /dist/myapp.ear

復元するアーカイブ ファイルに他のモジュール アーカイブ ファイル (たとえば、JAR ファイルや WAR ファイルを含むエンタープライズ アプリケーションまたは Web サービス) が含まれていて、それらのモジュールの部分的な更新を行う場合には、組み込まれたアーカイブ ファイルも展開する必要があります。各モジュールをアーカイブ ファイルと同じ名前のサブディレクトリに復元してください。たとえば、myejb.jar という名前のモジュールは、展開したエンタープライズ アプリケーション ディレクトリの /myejb.jar サブディレクトリに復元します。


注意 :

展開した .EAR ファイルのアーカイブ モジュールに異なるサブディレクトリ名を使用する場合は、アプリケーション自体の中で使用しているこれらのモジュールへの参照を修正する必要があります。たとえば、manifest.mf ファイルの application.xml および CLASSPATH のエントリに指定されている URI 値を更新する必要があります。

デフォルト デプロイメント名について

1 つまたは複数の WebLogic Server インスタンスにアプリケーションまたはスタンドアロン モジュールを最初にデプロイするときには、デプロイメント ファイル、対象サーバ、および選択したその他のコンフィグレーション オプションを総体的に説明するデプロイメント名を指定します。後ですべての対象サーバ上のデプロイメント ユニットを再デプロイまたは停止する場合、デプロイメント名を使用して簡単に指定できます。デプロイメント名を使用すると、ドメイン内の複数サーバにかかわるデプロイメント ユニットを操作する場合に、デプロイメント ファイルと対象サーバを再度特定する手間を省くことができます。

デプロイメント時にデプロイメント名を指定しない場合、デプロイメント ツールによってデプロイメント ソース ファイルに基づくデフォルトの名前が選択されます。アーカイブ ファイルの場合、weblogic.Deployer はアーカイブ ファイル名からファイル拡張子を抜いて使用します。たとえば、ファイル myear.ear のデフォルト デプロイメント名は、myear となります。展開されたアーカイブ ディレクトリの場合、weblogic.Deployer はデプロイする最上位ディレクトリの名前を使用します。

Java EE ライブラリおよびオプション パッケージの場合、weblogic.Deployer はライブラリのマニフェスト ファイルで指定されている名前を使用します。ライブラリのマニフェスト ファイルで名前が指定されていなければ、-name オプションで名前を指定できます。

アプリケーションのネーミング要件については次の「アプリケーションのネーミング要件について」を、デフォルト以外のデプロイメント名の指定については「weblogic.Deployer によるアプリケーションおよびモジュールのデプロイ」を参照してください。

アプリケーションのネーミング要件について

アプリケーションの WebLogic Server へのデプロイを正常に実行するには、アプリケーション名が有効であることが必要です。アプリケーションのネーミング要件は、次のとおりです。

デプロイメント バージョン文字列について

デプロイメント名に加えて、アプリケーションまたはモジュールには、バージョン文字列を関連付けることもできます。バージョン文字列により、アプリケーションの初期デプロイメントと、後の再デプロイされたバージョンが区別されます。たとえば、問題点を修正したり、新しい機能を追加したりするために、アプリケーションを後から更新する場合があります。プロダクション システムでは、アプリケーションの初期デプロイメントと後続するデプロイメントの双方についてバージョン文字列を維持することが非常に重要です。そうすることで、既存のクライアントに対するサービスを中断させることなく、アプリケーションのバージョンを更新し、再デプロイを行えます。詳細については、「プロダクション環境でのアプリケーションの再デプロイメント」を参照してください。

バージョン文字列は、アプリケーションのマニフェスト ファイルで指定され、他のデプロイメント ファイルと一緒に、開発チームによって提供されます。『Oracle Fusion Middleware Oracle WebLogic Server アプリケーションの開発』の「アプリケーションのバージョンの割り当て」で、バージョン文字列を指定する際の規約について説明しています。

アプリケーションのインストール ディレクトリの作成

アプリケーションのインストール ディレクトリにより、生成されたコンフィグレーション ファイルはコア アプリケーション ファイルから分離されるため、コンフィグレーション ファイルはアプリケーション自体を乱すことなく、簡単に変更または置換できます。このディレクトリ構造はまた、同じアプリケーション デプロイメント ファイルの複数バージョンの整理と維持にも役立ちます。

次の図では、デプロイ可能なアプリケーションまたはモジュールの 1 つのバージョンを格納するアプリケーション インストール ディレクトリの階層を示します。

図 3-1 アプリケーションのインストール ディレクトリ

図 3-1 の説明については本文を参照

すべての新しいプロダクション デプロイメントを、WebLogic Server ドメインにデプロイする前に、アプリケーションのインストール ディレクトリにコピーしておくことをお勧めします。このディレクトリ構造からデプロイすることで、デプロイメント ユニットと関連付けられたファイルをすべて簡単に識別できるようになります。Administration Console を使用してインストール ルートをデプロイするだけで、Administration Console が自動的にデプロイメント プランや WebLogic Server デプロイメント記述子など、コンフィグレーション中に生成された関連ファイルを見つけます。

アプリケーションのインストール ディレクトリを作成する手順

アプリケーションのインストール ディレクトリを作成するには、次の手順に従います。

  1. システム上でアプリケーションおよびモジュールのデプロイメント ファイルを格納する最上位ディレクトリを選択します。以下のベスト プラクティスに従ってください。

    • WebLogic Server ドメイン ディレクトリ内にデプロイメント ファイルを格納しない。

    • 可能であればソース コントロールを使用して、デプロイメント ソース ファイルを維持する。

    • 可能であれば、ドメイン内の管理サーバおよび管理対象サーバからアクセスできるディレクトリにデプロイメント ファイルを格納する。

    次の手順では、サンプル デプロイメント ディレクトリ c:\deployments\production を使用しています。

  2. デプロイするアプリケーションまたはモジュール専用のサブディレクトリを作成します。

    mkdir c:\deployments\production\myApplication
    
  3. デプロイしているアプリケーションのバージョンを指定するために、アプリケーション ディレクトリの下にサブディレクトリを作成します。アプリケーションの正確なバージョン文字列を使用して、サブディレクトリに名前を付けます。次に例を示します。

    mkdir c:\deployments\production\myApplication\91Beta
    
  4. バージョン サブディレクトリは、ディレクトリのデプロイ元であるインストール ルート ディレクトリとなります。バージョン サブディレクトリの下に、app および plan という名前のサブディレクトリを作成します。

    mkdir c:\deployments\production\myApplication\91Beta\app
    mkdir c:\deployments\production\myApplication\91Beta\plan
    

    注意 :

    アプリケーションに関連付けられたデプロイメント プランが複数ある場合は、各プランにつき 1 つの \plan サブディレクトリを作成します。たとえば、アプリケーション myApplication の 91Beta バージョンに関連付けられたデプロイメント プランが 2 つある場合は、\plan サブディレクトリを 2 つ作成します。次に例を示します。
    • mkdir c:\deployments\production\myApplication\91Beta\plan1

    • mkdir c:\deployments\production\myApplication\91Beta\plan2


  5. アプリケーション ソース デプロイメント ファイルを \app サブディレクトリにコピーします。アーカイブ ファイルからデプロイしている場合は、次のように、単にアーカイブ ファイルをコピーします。

    cp c:\downloads\myApplication.ear c:\deployments\production\myApplication\91Beta\app
    

    展開されたアーカイブ ディレクトリからデプロイしている場合は、展開されたアーカイブ ディレクトリ全体を \app にコピーします。

    cp -r c:\downloads\myApplication c:\deployments\production\myApplication\91Beta\app
    

    その結果、新しいディレクトリ c:\deployments\production\myApplication\91Beta\app\myApplication が作成されます。

  6. アプリケーションについて、1 つまたは複数のデプロイメント プランがある場合は、それらを \plan サブディレクトリにコピーします。

    アプリケーションのデプロイメント プランが 1 つの場合は、次のようになります。

    cp c:\downloads\myApplicationPlans\plan.xml c:\deployments\production\myApplication\91Beta\plan
    

    アプリケーションのデプロイメント プランが 2 つの場合は、次のようになります。

    cp c:\downloads\myApplicationPlans\plan1.xml c:\deployments\production\myApplication\91Beta\plan1
    cp c:\downloads\myApplicationPlans\plan2.xml c:\deployments\production\myApplication\91Beta\plan2
    

    注意 :

    既存のデプロイメント プランがなければ、「プロダクション デプロイメントのためのアプリケーションのコンフィグレーション」で説明するように、Administration Console を使用して作成できます。Administration Console は、アプリケーションのインストール ディレクトリの \plan サブディレクトリに、新しく生成されたデプロイメント プランを自動的に格納します。

  7. Administration Console を使用してアプリケーションをインストールするには、アプリケーションのインストール ディレクトリを選択します。デフォルトでは、plan.xml という名前のプランが \plan サブディレクトリ内にあれば、Administration Console はそれを使用します。Administration Console は、\plan サブディレクトリ以外のサブディレクトリ内にあるプランを識別しません。つまり、\plan1 または \plan2 サブディレクトリ内のプランは、Administration Console では識別されません。したがって、アプリケーションのプランが複数ある場合は、config.xml の中で、使用するプランを指定する必要があります。「プロダクション デプロイメントのためのアプリケーションのコンフィグレーション」を参照してください。config.xml の詳細については、『Oracle Fusion Middleware コンフィグレーション ウィザードを使用したドメインの作成』を参照してください。

    アプリケーションをインストール後は、必要に応じてアプリケーションをコンフィグレーション、デプロイ、または分散できます。


    注意 :

    weblogic.Deployer ツールを使用しているときは、アプリケーションのインストール ディレクトリを指定できず、利用可能な plan.xml ファイルがツールによってデフォルトで使用されることはありません。デプロイメントに使用する実際のデプロイメント ファイルおよびプランを指定する必要があります。「weblogic.Deployer によるアプリケーションおよびモジュールのデプロイ」を参照してください。

FastSwap デプロイメントによる再デプロイメントの最小化

Web アプリケーション開発者は、デプロイされたアプリケーションに変更を加えたら、その変更をブラウザを更新してすぐに確認したいと考えています。Java EE サイドで作業中の変更を確認するには、開発者は通常、次のサイクルを行う必要があります。

編集 -> ビルド -> デプロイ -> テスト

これらのステップでは、多くの記述子要素が必要であり、Java EE を使用したアプリケーション開発が複雑で最初の工程に負担がかかるのはそのためです。これらのステップのビルド サイクルとデプロイ サイクルは、Java および使用するアプリケーション サーバで必要になります。IDE では、段階的なコンパイル サポートによって編集ステップとビルド ステップをシームレスに行うことができます。また、サーバ サイドでは、WLS FastSwap デプロイメント機能がデプロイ サイクルとテスト サイクルのシームレス化を実現しています。

FastSwap デプロイメントの仕組み

Java EE 5 では、ClassLoader を削除したり既存のインスタンスを破棄したりすることなく、実行時にクラスを再定義する機能が導入されています。これにより、コンテナは実行中のアプリケーションに影響を与えることなく、変更されたクラスを再ロードできるため、反復的な開発サイクル時間が大幅に短縮され、開発およびテスト全体が改善されています。しかし、クラス (宣言されたフィールドとメソッド) の形式が変更できないという制限によって、Java EE 動的クラスの再定義は大幅に制限されます。FastSwap の目的は、WLS においてこの制限をなくし、新しい形式のクラスを動的に再定義できるようにして反復的な開発を容易にすることです。

FastSwap を使用すると、ClassLoader を再ロードせずにインプレースで Java クラスを再定義するため、所要時間を短縮できるという点で明らかに有利です。つまり、アプリケーションが再デプロイするまで待機した後に作業していた Web ページ フローに戻るということをしないで済みます。代わりに、変更を追加すると、自動でコンパイルされ、すぐに結果が確認できます。

FastSwap でサポートされるアプリケーション コンフィグレーション

FastSwap デプロイメントを使用する場合、次のアプリケーション コンフィグレーションがサポートされます。

  • FastSwap は、WLS が開発モードで実行している場合にのみサポートされる。プロダクション モードの場合は、自動的に無効になります。

  • 展開されたディレクトリ内のクラス ファイルへの変更のみサポートされる。アーカイブされたアプリケーション内のクラス ファイルや、アプリケーションのクラスパスに含まれるアーカイブされた JAR ファイルへの変更はサポートされません。以下に例を示します。

    • EAR に含まれるアーカイブされた WAR として Web アプリケーションがデプロイされる場合、クラスへの変更は FastSwap エージェントによって認識されません。

    • 展開された Web アプリケーション内の Java クラスへの変更は、WEB-INF/classes ディレクトリ内でのみサポートされ、FastSwap エージェントは WEB-INF/lib に含まれるアーカイブされた jar への変更は認識しません。

アプリケーションにおける FastSwap の有効化

アプリケーションで FastSwap を有効にするには、weblogic-application.xml ファイルに次の要素を追加します。

 <fast-swap>
    <enabled>true</enabled>
 </fast-swap>

weblogic-application.xml 要素の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server アプリケーションの開発』の「エンタープライズ アプリケーションのデプロイメント記述子の要素」を参照してください。

スタンドアロンの Web アプリケーションで FastSwap を有効にするには、weblogic.xml ファイルに <fast-swap> 要素を追加します。weblogic.xml 要素の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web アプリケーション、サーブレット、JSP の開発』の「weblogic.xml デプロイメント記述子の要素」を参照してください。

FastSwap プロセスの概要

FastSwap デプロイメント プロセスの手順を以下に示します。

  1. 記述子レベルで FastSwap が有効になると、アプリケーションが WLS にデプロイされるときに、適切な ClassLoader がインスタンス化されます。

  2. ブラウザを開いて動作中のアプリケーションを確認します。次に、メソッドまたはクラスを変更 (追加/編集/削除) し (「FastSwap 使用時の制限」を参照)、コンパイルします。

    Eclipse や IntelliJ などの IDE を使用して、Java ファイルが保存時にコンパイルされるように保存時にコンパイルされるオプションを設定することをお勧めします。FastSwap エージェントは Java ファイルをコンパイルしません。

  3. ブラウザを更新するか、アプリケーションに新しいリクエストを送信します。

    FastSwap エージェントは、クラスパスに含まれるすべてのディレクトリを検索することによって、最後の反復処理から変更されたすべてのクラスを検索しようとします。展開されたアプリケーションが単一の Web アプリケーションである場合、次のディレクトリに対してタイムスタンプに基づいてクラス ファイルの変更の有無が調査されます。

    ExampleApp/APP-INF/classes
    ExampleApp/webapp/WEB-INF/classes
    

    FastSwap エージェントは、アプリケーションの変更されたクラスを再定義し、リクエストを処理します。

Ant での JMX インタフェースの使用

「ヘッドレス」アプリケーション (Web アプリケーションを経由しないアプリケーション) の場合、クラスの再定義は JMX インタフェースを使用して明示的に初期化できます。JMX インタフェースを使用する Ant タスクは、クラスの再定義の初期化に使用できます。Ant FastSwap タスクの例を次に示します。

コード リスト 3-1 Ant での JMX インタフェースの使用

<project name='MyProject' default='all' >
  <taskdef name='fast-swap'  classname='com.bea.wls.redef.ant.FastSwapTask'/>
  <target name='all'>
    <!--
      最後のロードから変更されたクラスを再定義する。
      必須パラメータ :
       adminUrl: 接続 URL
           user: ユーザ名
       password: ユーザ パスワード
         server: 管理対象サーバ名
      application: デプロイ対象のアプリケーション名
      省略可能なパラメータ :
          module: アプリケーション内のモジュールの名前
                  指定しない場合、アプリケーション内のすべてのモジュールが
                  処理される
       failonerror: デフォルトは true。true の場合、高速スワップに失敗するとタスクが失敗する。                  true でない場合、メッセージが表示され、タスクが
                    成功を返す。         timeout: デフォルトは 300。タイムアウトは秒単位。      classnames: 処理対象のクラス名のリストはカンマで区切る。指定しない場合、
                  アプリケーションの指定されたモジュール (存在する場合)
                    のすべてのクラスが対象になる。    -->
    <fast-swap
      adminUrl='t3://localhost:7001'
      user='weblogic'
      password='weblogic'
      server='myserver'
       application='SimpleApp'
      module='SimpleAppCookie'
      failonerror='false'
      timeout='30'
      classnames='examples.servlets.CookieCounter1,
                  examples.servlets.CookieCounter2,
                    examples.servlets.CookieCounter'
    />
  </target>
</project>

FastSwap でサポートされるアプリケーション タイプと変更

FastSwap は、展開形式でデプロイされた POJO (JAR)、Web アプリケーション (WAR)、およびエンタープライズ アプリケーション (EAR) でサポートされます。FastSwap は、リソース アダプタ (RAR) ではサポートされません。

FastSwap でサポートされる変更のタイプを以下に示します。

  • 静的メソッドの追加

  • 静的メソッドの削除

  • インスタンス メソッドの追加

  • インスタンス メソッドの削除

  • 静的メソッド本体の変更

  • インスタンス メソッド本体の変更

  • 静的フィールドの追加

  • 静的フィールドの削除

  • インスタンス フィールドの追加

  • インスタンス フィールドの削除

次の表に、FastSwap でサポートされる変更タイプの詳細を示します。

表 3-1 サポートされるアプリケーション タイプおよび変更

スコープ Java の変更タイプ サポート メモ

Java クラス

メソッドの追加

あり

finalize メソッドの追加はサポートされない。

インスタンス (非抽象)

メソッドの削除

あり

finalize メソッドの追加はサポートされない。


a) フィールドの追加

あり



b) フィールドの削除

あり



c) メソッド本体の変更

あり



d) コンストラクタの追加

あり



e) コンストラクタの削除

あり



f) フィールド修飾子の変更

あり



g) メソッド修飾子の変更

あり


クラスレベル (静的)

メソッドの追加

あり



メソッドの削除

あり



メソッド本体の変更

あり


クラス階層の変更

実装インタフェースのリストの変更

なし



「SuperClass」拡張の変更

なし


抽象 Java クラス

抽象メソッドの追加

あり



抽象メソッドの削除

あり



インスタンスでサポートされるその他のすべての変更 (a – g)

あり


「final」 Java クラス

インスタンスでサポートされる変更 (a – g)

あり


「final」 Java メソッド

インスタンスでサポートされる変更 (a – g)

あり


「final」 Java フィールド

インスタンスでサポートされる変更 (a – g)

あり


Enum

定数の追加

なし



定数の削除

なし



メソッドの追加/削除

なし


無名内部クラス

フィールドの追加/削除

NA

Java 言語でサポートされない

メソッドの追加/削除

なし


静的内部クラス

インスタンスでサポートされる変更 (a – g)

あり


メンバー内部クラス (非静的内部クラス)

インスタンスでサポートされる変更 (a – g)

あり


ローカル内部クラス

インスタンスでサポートされる変更 (a – g)

あり


Java インタフェース

メソッドの追加

必須


Java リフレクション

既存のフィールド/メソッドへのアクセス

あり



新しいメソッドへのアクセス

なし

リフレクションでは新しいメソッドは公開されない。一部の合成メソッドは公開される。


新しいフィールドへのアクセス

なし

リフレクションでは新しいフィールドは公開されない。

クラスのアノテーション

メソッド/フィールド アノテーションの追加または削除

なし


アノテーション タイプ

メソッド/属性の追加または削除

なし


例外クラス

インスタンスでサポートされる変更 (a – g)

あり


EJB インタフェース

メソッドの追加/削除

なし

EJB インタフェースの変更には、フルサポートではないリフレクションを使用。

EJB 3.0 セッション/MDB

EJB 実装クラス

メソッドの追加/削除

なし

EJB クラスによって参照されるサポート クラスは変更可能。

フィールドの追加/削除

なし


EJB 3.0 エンティティ Bean

メソッドの追加/削除

なし

EJB クラスによって参照されるサポート クラスは変更可能。


フィールドの追加/削除

なし


EJB インターセプタ

メソッドの追加/削除

なし

EJB クラスによって参照されるサポート クラスは変更可能。


フィールドの追加/削除

なし



FastSwap 使用時の制限

FastSwap デプロイメントを使用する場合、次のような制限が適用されます。

  • Java リフレクションの結果には、新しく追加されたフィールドとメソッドが含まれず、削除されたフィールドとメソッドが含まれる。その結果、Reflection API を使用すると、予期しない結果になる可能性があります。

  • 既存のクラスの階層は、FastSwap では変更できない。たとえば、クラスの実装インタフェースのリストの変更や、クラスのスーパークラスの変更はサポートされません。

  • Java アノテーションの追加または削除は、FastSwap ではサポートされない (上述のリフレクション変更に関係するため)。

  • EJB インタフェースの追加または削除は、FastSwap ではサポートされない (EJB コンパイル ステップで実行時に変更を反映する必要があるため)。

  • Enum の定数の追加または削除はサポートされない。

  • finalize メソッドの追加または削除はサポートされない。

  • フィールド名を変更する場合、オブジェクトの状態は保持されない。これは、古い名前のフィールドを削除し、新しい名前のフィールドを追加する場合の変更です。この場合、古いフィールドの状態はすべて、名前変更後のフィールドに持ち越されません。インスタンスの値がリセットされることを踏まえた上でフィールド名を変更してください。

FastSwap でサポートされない変更の処理

FastSwap が有効な場合、クラスを再コンパイルした後に FastSwap は既存のクラスローダにクラスを再定義しようとします。行った変更が FastSwap でサポートされる変更のスコープ外である場合、再定義は失敗し、JVM によって WLS ウィンドウとサーバ ログ ファイルに UnsupportedOperationException が送出されます。アプリケーションは変更を反映しませんが、実行は継続されます。

変更を反映するには、アプリケーション タイプと変更の範囲に応じて、アプリケーションまたは影響を受けるモジュール (部分的な再デプロイ) を再デプロイします。

デプロイメント ファイルの準備のベスト プラクティス

アプリケーションおよびモジュールのデプロイメント準備を行う際には、次のベスト プラクティスをお勧めします。