ヘッダーをスキップ
Oracle Containers for J2EEデプロイメント・ガイド
10g(10.1.3.5.0)
B56032-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

14 OC4Jでのオートデプロイの使用方法

この章では、OC4Jのオートデプロイ機能について説明します。オートデプロイでは、アプリケーション内の変更されたファイルのみがOC4Jインスタンスに自動的にリロードされます。アプリケーション全体を再デプロイする必要はありません。

次の項目について説明します。

OC4Jでのオートデプロイの概要

オートデプロイ、すなわちOC4Jポーリングは、現在デプロイされているアプリケーションやモジュールに加えられた変更を調べて、変更されたファイルを自動的にリロードするタスク管理機能です。この機能によって、コードの更新のたびにデプロイ・プロセスを繰り返す必要がなくなることから、開発者には大きな利点があります。

デフォルトでは、OC4Jはデプロイするファイルを1秒おきにチェックします。この間隔は、server.xml構成ファイルの<application-server>要素のtaskmanager-granularity属性で構成できます。タスク・マネージャ構成の詳細は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。

展開ディレクトリのデプロイ

OC4JでJ2EEアプリケーションを開発する場合、迅速なデプロイおよびテスト・サイクルを実現するために、展開ディレクトリのデプロイを使用できます。展開ディレクトリのデプロイにより、エンタープライズ・アプリケーション・アーカイブ(EAR)またはWebアプリケーション・アーカイブ(WAR)ファイルにアプリケーションをパッケージすることなく、分散した一連の展開ディレクトリにアプリケーションをデプロイできます。

1つの展開ディレクトリがアプリケーションレベルのディレクトリを表し、残りはデプロイされるモジュールになります。モジュール・ディレクトリは、アプリケーションレベル・ディレクトリの下位に配置できます。または、それ以外の場所に配置して、各モジュール・ディレクトリへの代替パスを指定できます。

必要に応じた更新済ファイルの再デプロイ

自動ポーリングに加えて、admin.jarコマンドライン・ユーティリティには、更新済ファイルをOC4Jで強制的にチェックする-updateConfigオプションが含まれています。この機能を本番環境で使用すると、更新済ファイルのチェックとリロードを必要なときに行うことができます。この機能の詳細は、「admin.jarによる1回かぎりの再デプロイ強制実行」を参照してください。

オートデプロイを使用する場合

オートデプロイは、開発環境のスタンドアロンOC4Jインスタンスに対してのみ使用してください。本番環境での使用はお薦めしません。

理由は、ポーリング・メカニズムがタスク・マネージャによって定期的に起動され、システム・リソースが使用されるためです。また、オートデプロイによってOC4Jの一貫性が失われる危険があり、リクエストがOC4Jに対する実行を試行した場合にエラーが発生することがあります。

展開ディレクトリのデプロイを使用したアプリケーションのデプロイとテスト

展開ディレクトリのデプロイは、EARファイルにパッケージされたJ2EEアプリケーションのデプロイと同等であり、部分再デプロイをサポートすることでアプリケーションのテストを容易にします。EARファイルをデプロイする場合、OC4JではEARのコピーが作成され、そのコピー内のファイルにアクセスすることでアプリケーションが実行されます。展開ディレクトリのデプロイの場合、OC4Jではデプロイ・プランのみがコピーされ、ファイル・システム内の元のアプリケーション・ファイルにアクセスすることでアプリケーションが実行されます。

アプリケーションは、パッケージされたアプリケーション・アーカイブのかわりに、完全に展開された標準のディレクトリ構造からデプロイできます。展開ディレクトリのデプロイでは、OC4Jにより、すべてのWebコンテンツ、クラス・ファイル、ライブラリ、デプロイメント・ディスクリプタなどが直接ファイル・システムから読み取られます。この方法で、すべてのタイプの標準J2EEモジュールおよびアプリケーション(Webモジュール、EJBモジュールおよび完全なJ2EEアプリケーションを含む)をデプロイできます。展開ディレクトリは、アプリケーションおよびコンポーネント向けの標準のJ2EEディレクトリ構造に準拠している必要があります。

OC4J構成ファイルのserver.xmlで、アプリケーション・ディレクトリへのパスを指定できます。ただし、アプリケーションの各モジュールは、アプリケーションレベル・ディレクトリのサブディレクトリ内に存在する必要はありません。モジュール・ディレクトリは、ファイル・システム内の他の場所に配置し、アプリケーションのapplication.xmlデプロイメント・ディスクリプタに各モジュールへの代替パスを指定できます。また、代替パスは、OC4Jアプリケーション・デプロイメント・ディスクリプタのorion-application.xmlに指定することもできます。

マスター・ディレクトリからのJ2EEアプリケーションのビルドおよびデプロイ

アプリケーションの開発時に展開ディレクトリのデプロイを使用すると、クラスを迅速に変更、コンパイルおよび実行できます。OC4Jでは、展開ディレクトリ形式で開発したアプリケーションが自動的にデプロイされます。

このオートデプロイは、アプリケーションレベル・ディレクトリ(図14-1appnameのようなマスター・ディレクトリ)でタイムスタンプが変更されると常に実行されます。マスター・ディレクトリのサブディレクトリ(マスター・ディレクトリ内に存在するか、ファイル・システム内の他の場所に存在)は、OC4Jでデプロイするアプリケーション・モジュールです。

展開ディレクトリのデプロイを実行するには、アプリケーションの初期デプロイ用にOC4J構成ファイルを変更する必要があります。マスター・ディレクトリの場所は、OC4Jのserver.xml構成ファイルのpath属性の値です。application.xmlおよび(オプションで)orion-application.xmlに各J2EEモジュールの代替パスを指定することで、OC4Jではモジュール・ディレクトリの場所を特定できます。パス名の形式は、プラットフォームに依存します。LinuxまたはUNIX環境では、パス名にスラッシュを含めることができます。Windows環境では、パス名に円記号を含めることができます。パス名の例は、次のとおりです。

D:\sharedfolder\My resource

/scratch/sharedfolder/my resource

展開ディレクトリのデプロイでは、アプリケーションのマスター・ディレクトリと各モジュール・ディレクトリが、EAR、WARまたはJARファイルに必要とされる階層形式を保持している必要があります。ディレクトリ・パスのセットがアプリケーションを表しており、マスター・ディレクトリを示す1つのパスと、それぞれがアプリケーション・モジュールの場所を示す1つ以上の代替パスが存在します。図14-1は、マスター・ディレクトリappnameを含むJ2EEアプリケーションのディレクトリ構造を示しています。appnameの下のディレクトリ構造は、EARファイル内の構造と同じです。

図14-1 アプリケーションのディレクトリ構造

図14-1の説明が続きます
「図14-1 アプリケーションのディレクトリ構造」の説明

マスター・ディレクトリからJ2EEアプリケーションをビルドおよびデプロイする手順:

  1. 次のように、ファイルを任意のディレクトリまたはディレクトリ・セットに配置します。

    1. 各EJB JAR、WAR、クライアントJARおよびRARファイルの名前を、個別のモジュールを表す任意のディレクトリ名で置き換えます。

      図14-1では、これらのディレクトリ名がejb_module/web_module/client_module/およびconnector_module/で表されています。

    2. パッケージ構造にマップされる適切なディレクトリ構造内に各モジュールのクラスを配置します。

  2. server.xmlファイルを編集し、デプロイされる展開ディレクトリへのパスを指定する新しい<application>要素を追加します。

    次に例を示します。

      <application name="dwp" path="file://d:/eclipse/workspace/dwp/test-app"/>
    
  3. application.xmlおよび(オプションで)orion-application.xmlにJ2EEモジュールの絶対パスまたは相対パスをリストします。

    j2ee/home/applications/appname/META-INF/application.xmlファイルで、<module>要素内の<web-uri><ejb>および<client>要素を変更し、各モジュールのディレクトリ・パス名(JARまたはWARファイル名ではありません)を指定します。各モジュールが存在するディレクトリを指定する場合、これらの各要素のパス名は、マスター・ディレクトリを基準とする相対パスで表し、各アプリケーション・タイプのWEB-INFまたはMETA-INFディレクトリの親を指定する必要があります。

    application.xmlorion-application.xmlで同じJava EEモジュールを参照する場合、キーはパス指定です(絶対または相対、ディレクトリURLまたはアーカイブ・ファイルURL)。キーは、両方のファイルで同一である必要があります(キーが含まれる場合)。

    たとえば、次の<web-uri>要素では、<web>および<module>要素内でWebモジュール・ディレクトリとしてmyapp-web/を指定しています。

    <module>
      <web>
        <web-uri>myapp-web</web-uri>
      </web>
    </module>
    

    注意:

    OC4J 10g(10.1.3.5.0)では、j2ee/home/config/system-application.xmlファイルで示されるsystemアプリケーションがすべてのアプリケーションの最上位の親になります。ただし、Webモジュールは、j2ee/home/config/application.xmlで示されるdefaultアプリケーションにデプロイすることをお薦めします。

  4. j2ee/home/config/default-web-site.xmlファイルで、展開ディレクトリ内のWebアプリケーションごとに新しい<web-app>要素を追加します。

    次に例を示します。

    <web-app application="dwp" module="web" context-root="/dwp"/>
    

    <web-app>要素により、アプリケーションがWebサイトにバインドされます。<web-app>application属性の値は、server.xmlファイルのアプリケーション名と同じである必要があります。name属性の値は、application.xmlファイルの<web-uri>要素のパスのように、Webアプリケーションへのディレクトリ・パスである必要があります。

  5. デプロイされるアプリケーションが展開WAR形式のスタンドアロンWebアプリケーションである場合、そのアプリケーションをスタンドアロンWebモジュールとしてdefaultアプリケーションにデプロイできます。

    1. application.xmlファイルを編集し、デプロイされる展開ディレクトリへのパスを指定する新しい<web-module>要素を次のように追加します。

      <web-module id="dwp" path="file://d:/eclipse/workspace/dwp/web"/>
      
    2. default-web-site.xmlファイルを編集し、Webモジュールの新しい<web-app>要素を次のように追加します。

      <web-app application="default" module="dwp" root="/dwp"/>
      

OC4Jが起動すると、アプリケーションとWebモジュールが、指定された展開ディレクトリ・パスからデプロイされます。

展開ディレクトリへのアプリケーション・モジュールのクローニング

アプリケーション・モジュールから展開アプリケーション全体を作成することが可能です。これを行うには、application.xmlファイルをexploded-application.xmlファイルにクローニングし、不要なエントリを削除してからアプリケーションをserver.xmlに追加します。これにより、J2EEモジュールをdefaultアプリケーションの外部にある、起動、停止および管理可能な独自のアプリケーション内に維持できます。

展開ディレクトリにアプリケーションをクローニングする手順:

  1. application.xmlファイルを、ORACLE_HOME/j2ee/instance/configディレクトリのexploded-application.xmlにコピーします。

    >cd j2ee/home/config
    >cp application.xml exploded-application.xml
    
  2. server.xmlを編集して次の要素を追加します。

    <application name="exploded" path="exploded-application.xml" parent="default"
     start="true" />
    
  3. exploded-application.xmlを編集して、不要なアプリケーション・モジュール(ほとんどのモジュール)を削除し、次のようにWebモジュールのエントリを追加します。

    <web-module id="exp" path="d:/temp/exp/how-to-cluster-web" />
    
  4. 展開Webモジュールをexploded Webサイトにバインドします。

    <web-app application="exploded" name="exp" load-on-startup="true" context-root="/exp" />
    

    新規格納アプリケーションの名前がexplodedになったため、default Webサイトのかわりにexplodedを使用します。

展開ディレクトリからの変更済クラスのリロード

展開ディレクトリのデプロイの使用時に、展開ディレクトリ構造でJavaServer Pages(JSP)モジュールを変更すると、デフォルトのOC4J設定によりその変更が認識され、ページが再コンパイルされます。暗黙的なデフォルト設定のwith main_modeにより、OC4JではJSPモジュールに対する変更が検出されます。

変更済のJSPが再コンパイルされない場合、ブラウザがキャッシュからページをロードしないように、[Shift]を押しながら「更新」をクリックしてください。

Web Bean、DTO、DAOなど、JSPモジュールで使用されるコンパイル済のJavaクラスを変更した場合、OC4Jでは、JSPモジュールで変更済のクラスが検出されません。

展開ディレクトリから変更済クラスをリロードする手順:

  • server.xmlの<application-server>要素でcheck-for-updates属性をallに設定します。

    <application-server
        application-directory="../applications"
        check-for-updates="all"
        deployment-directory="../application-deployments"
        connector-directory="../connectors"
        schema-major-version="10" schema-minor-version="0" >
    

    これで、展開ディレクトリで発生したクラスの変更がすべて検出されます。

    check-for-updates属性の詳細は、「更新の確認機能の使用」を参照してください。


注意:

JARファイルをデプロイする方が、より優れたパフォーマンスを得ることができます。実行時には、JARファイル全体がメモリーにロードされ、索引付けされます。この方法は、必要に応じて開発ディレクトリから各クラスを読み取るより高速です。

オートデプロイ・ディレクトリの使用

オートデプロイを開始するには、EARファイルをOC4Jインスタンス内の指定のauto-deploymentディレクトリにドロップします。この機能はスタンドアロンOC4J開発環境のみで使用してください。

このディレクトリは、OC4Jインスタンスのホストであるサーバーに作成する必要があります。OC4Jで自動的に作成されることはありません。OC4J内の既存のディレクトリ(ORACLE_HOME/j2ee/instance/applicationsなど)を使用することもできます。

次に、ディレクトリの場所をapplication-auto-deploy-directory属性に指定する必要があります。これは、ORACLE_HOME/j2ee/instance/config/server.xmlのルートの<application-server>要素に追加してください。

次に示すserver.xmlのエントリでは、ORACLE_HOME/j2ee/instance/applicationsがオートデプロイ・ディレクトリとして設定されます。

<application-server ...
 application-directory="../applications" check-for-updates="adminClientOnly"
 deployment-directory="../application-deployments"
 application-auto-deploy-directory="../applications">
...
</application-server>

注意:

更新の確認機能が有効にならない場合は、OC4Jを再起動して、server.xmlの構成の変更を有効にする必要があります。

構成が終了すると、タスク・マネージャが実行されるたびに、OC4Jがこのディレクトリをポーリングして新しいEARファイルまたは更新されたEARファイルを調べます。サーバーはEARファイルのタイムスタンプを比較して、再デプロイを開始するかどうかを判別します。再デプロイが必要な場合は、EARが自動的にデプロイされます。EARにWARファイルとしてパッケージされているWebモジュールがあれば、default Webサイトに自動的にバインドされます。

オートデプロイ・ディレクトリの機能は、OC4Jポーリングからは完全に独立しています。このディレクトリにドロップされたアーカイブは、OC4Jポーリングが有効か無効かに関係なくデプロイされます。

更新の確認機能の使用

更新の確認機能を使用して、ファイルをOC4Jインスタンスに再デプロイできます。次の項目について説明します。


注意:

ORACLE_HOME/j2ee/instance/applicationsディレクトリにコピーされたEARファイルまたはWARファイルは、オートデプロイが有効かどうかに関係なく、OC4Jの起動時にデフォルトでデプロイまたは再デプロイされます。

EARファイルまたはWARファイルは、そのタイムスタンプがファイルを格納するディレクトリのタイムスタンプより新しい場合にもデプロイされます。


更新の確認の有効化または無効化

更新の確認機能は、次のいずれかの方法で有効にできます。

  • ORACLE_HOME/j2ee/instance/config/server.xmlのルート<application-server>要素のcheck-for-updates属性。次に例を示します。

    <application-server ... check-for-updates="all" ... />
    
  • oc4j.jarコマンドラインでのcheckForUpdatesシステム・プロパティの設定。次に例を示します。

    java -DcheckForUpdates=all -jar oc4j.jar
    

注意:

次の注意事項が、checkForUpdatesシステム・プロパティに適用されます。
  • すべてのシステム・プロパティには、コマンドラインで-Dという接頭辞が付きます。

  • このプロパティで設定する値によって、server.xmlに設定された値がオーバーライドされます。


表14-1に、いずれかの方法を使用してcheckForUpdatesに設定できる値を示します。

表14-1 checkForUpdatesの有効な値

説明

all

OC4Jポーリングを有効にします。ポーリングは、OC4Jタスク・マネージャの構成で指定された間隔で自動的に開始します。デフォルトの間隔は1秒です。

このオプションは、Oracle Application Serverまたは本番環境では使用しないでください。

この値を指定すると、-updateConfigオプションをadmin.jarコマンドラインで渡すことができます。このオプションにより、OC4Jで更新済ファイルの確認が強制的に1回実行されます。

この機能の詳細は、「admin.jarによる1回かぎりの再デプロイ強制実行」を参照してください。

adminClientOnly

これは、スタンドアロンOC4JインストールとOracle Application Serverインストールの両方で設定されるデフォルト値です。-updateConfigオプションをadmin.jarコマンドラインで渡すことができます。このオプションにより、OC4Jで更新済ファイルの確認が強制的に1回実行され、変更があったファイルはリロードされます。

この機能の詳細は、「admin.jarによる1回かぎりの再デプロイ強制実行」を参照してください。

none

-updateConfigオプションも含めてOC4Jポーリングが完全に無効になります。


構成ファイル、デプロイメント・ディスクリプタおよびWARファイルの自動的な再デプロイ

OC4Jインスタンスに自動的に再デプロイできるのは次のファイルです。

  • ORACLE_HOME/j2ee/instance/configディレクトリにある、変更されたOC4J固有のXML構成ファイル(server.xmlなど)。

  • ORACLE_HOME/j2ee/instance/applicationsディレクトリにコピーされている、更新済EARファイルにパッケージされた変更済デプロイメント・ディスクリプタ。

  • 更新済WARファイルにパッケージされている次のファイル。WARは、ORACLE_HOME/j2ee/instance/applications/ディレクトリにコピーされたEARファイルにパッケージされている場合と、WebモジュールのORACLE_HOME/j2ee/instance/applications/webAppNameディレクトリに直接コピーされている場合があります。

    • 変更されたデプロイメント・ディスクリプタ

    • WAR内のWEB-INF/lib/パスまたはWEB-INF/classes/*パスにある更新されたファイル

    • 更新されたJSPタグ・ライブラリ(TLD)ファイル


注意:

現在、この機能では、EJB関連またはデータソース関連の構成の変更は自動的に検出されません。たとえば、EJB JARファイル内の変更されたファイルは自動的に再デプロイされません。このような構成の変更を検出して適切に適用するためには、OC4Jを再起動する必要があります。

変更済構成ファイルの自動的な再デプロイの影響

次の表に、checkForUpdatesallに設定して機能を有効にした場合の、様々なファイルの変更や更新による影響を示します。OC4Jポーリングを有効にする方法は、「更新の確認の有効化または無効化」を参照してください。

表14-2に、OC4JインスタンスのORACLE_HOME/j2ee/instance/configディレクトリ内のOC4J構成ファイルを変更した場合の影響を示します。

表14-2 OC4J構成ファイルの変更の影響

変更するファイル 開始される処理

server.xml

OC4Jサーバー構成ファイルを変更すると、OC4Jサーバーが再起動されます。

global-web-application.xml

OC4JサーブレットやJSPコンテナの構成に使用されるこのファイルを変更すると、インスタンス内のすべてのWebサイトにバインドされているすべてのWebモジュールが強制的に再起動されます。

application.xml

このOC4Jインスタンスのすべてのアプリケーションの共通設定を含むこのファイルを変更すると、デプロイされているすべてのアプリケーションが強制的に再起動されます。

*-web-site.xml

Webサイト構成ファイルを変更すると、Webサイトが再起動されます。再起動中は受信リクエストが処理されません。


変更済デプロイメント・ディスクリプタの自動的な再デプロイの影響

表14-3には、ORACLE_HOME/applicationsディレクトリにコピーされた更新済EARファイル内の1つ以上のデプロイメント・ディスクリプタの変更による影響を示します。

表14-3 EAR内のファイルの変更の影響

変更するファイル 開始される処理

application.xml

EAR内のJ2EE標準アプリケーション・デプロイメント・ディスクリプタを変更すると、アプリケーションが強制的に再起動されます。

OC4Jデプロイメント・ディスクリプタ

デプロイ済EARにパッケージされたOC4Jプロプライエタリ・デプロイメント・ディスクリプタ(orion-application.xmlなど)を変更すると、EARが再デプロイされ、更新された構成を使用して再起動されます。


WAR内の変更済ファイルの自動的な再デプロイの影響

表14-4に、アプリケーションの一部としてデプロイされている更新済WARファイル内のファイルまたはデプロイメント・ディスクリプタの変更による影響を示します。更新済WARファイルは、EARにパッケージされている場合と、WebモジュールのORACLE_HOME/j2ee/instance/applications/webAppNameディレクトリにコピーされている場合があります。

OC4Jは、各ファイルのタイムスタンプを調べて、タイムスタンプが他と異なるファイルのみを再デプロイします。

表14-4 WAR内のファイルの変更の影響

変更するファイル 開始される処理

web.xmlまたはorion-web.xml

更新済WARファイル内のJ2EE標準Webデプロイメント・ディスクリプタまたはOC4J固有のディスクリプタを変更すると、Webモジュールが新しい構成で再起動されます。

WEB-INF/lib/

このパスのライブラリJARファイルを更新すると、強制的にWebモジュールが再起動され、変更されたクラスがリロードされます。

WEB-INF/classes/*

このパスのファイルを更新すると、強制的にWebモジュールが再起動され、変更されたクラスがリロードされます。

.tldファイル

TLDファイルを更新すると、強制的にWebモジュールが再起動されます。


admin.jarによる1回かぎりの再デプロイ強制実行

admin.jarコマンドライン・ユーティリティを使用して、スタンドアロンOC4Jインスタンスを管理できます。このツールには、必要なときにOC4Jポーリングを有効にする-updateConfigオプションが含まれます。これにより、ディレクトリで更新済ファイルが強制的にチェックされ、変更されたファイルがリロードされます。


使用上の注意:

  • admin.jarツールを使用できるのは、スタンドアロンOC4Jインスタンスに対してのみです。OPMN管理のインスタンスには使用することができません。

  • この機能を使用するには、checkForUpdatesallまたはadminClientOnlyに設定する必要があります。


ユーティリティはデフォルトでORACLE_HOME/j2ee/instanceにインストールされます。このユーティリティを使用するにはOC4Jサーバーが起動済である必要がありますが、デプロイ前にdata-sources.xmlファイルを変換した場合は例外です。

このコマンドの構文は次のとおりです。

java -jar admin.jar ormi://host:ormiPort adminId adminPassword
 -updateConfig

次の例では、oc4jOrmiPortに指定する値はデフォルトの23791です。adminIdに指定するユーザー名は、デフォルトの管理者アカウントのユーザー名oc4jadminです。

cd ORACLE_HOME\j2ee\instance
java -jar admin.jar ormi://localhost:23791 oc4jadmin password -updateConfig

admin.jarユーティリティの使用方法の詳細は、『Oracle Containers for J2EE構成および管理ガイド』を参照してください。