4.4. 配備・再配備

4.4.1. コマンドを利用した配備 (deploy)

運用管理コマンドのdeployオペレーションを利用してJava EEのアプリケーションを配備/再配備する方法について説明します。 なお、運用管理コマンドの詳細については運用管理コマンドリファレンスの「deploy」を参照してください。

配備するには、Java EEのアプリケーションのアーカイブを指定してオペレーションdeployを実行します。 WebOTX AS Standardの場合は、配備先のアプリケーショングループ名とプロセスグループ名を指定することができます。

otxadmin> deploy [--apgroup アプリケーショングループ名] [--pgroup プロセスグループ名] アーカイブ名

再配備するには、--forceオプションを付加します。

otxadmin> deploy --force アーカイブ名

具体例を挙げると、WebOTX AS Expressにおいてアーカイブ名が「hello.war」であるWebアプリケーションを配備し、その後再配備するには、次のようにします。

otxadmin> deploy hello.war
otxadmin> deploy --force hello.war

※ WebOTX AS Standardにおいてエージェントプロセスに配備する場合も同様です。

別の例を挙げると、WebOTX AS Standardにおいてアーカイブ名が「sample.jar」であるEJBアプリケーションをプロセスグループに配備し、その後再配備するには、次のようにします。 配備先のアプリケーショングループ名をapgで、プロセスグループ名をpgとしています。

otxadmin> deploy --apgroup apg --pgroup pg sample.jar
otxadmin> deploy --force sample.jar

4.4.2. コマンドを利用した配備 (deploydir)

運用管理コマンドのオペレーションdeploydirを利用してJava EEのアプリケーションを配備/再配備する方法について説明します。 なお、運用管理コマンドの詳細については運用管理コマンドリファレンスの「deploydir」を参照してください。

通常の配備では、アプリケーションをパッケージングし、そのアーカイブを配備します。 オペレーションdeploydirを利用すると、パッケージング前のディレクトリ構造そのものを配備することができます。

配備するには、Java EEのアプリケーションが格納されているディレクトリのフルパスを指定してオペレーションdeploydirを実行します。 配備対象のディレクトリのフルパスは、WebOTX ASが動作しているホストにおけるフルパスです。 アプリケーションをクライアントマシンからサーバマシンへ転送する機能はありません。 WebOTX AS Standardでは、配備先のアプリケーショングループ名とプロセスグループ名を指定することができます。

otxadmin> deploydir [--apgroup アプリケーショングループ名] [--pgroup プロセスグループ名] ディレクトリのフルパス

再配備するには、--forceオプションを付加します。

otxadmin> deploydir --force ディレクトリのフルパス

具体例を挙げると、WebOTX AS Expressにおいてアプリケーションのディレクトリのフルパスが「C:\hello」であるWebアプリケーションを配備し、その後再配備するには、次のようにします。

otxadmin> deploydir C:\\hello
otxadmin> deploydir --force C:\\hello

※ WebOTX AS Standardにおいてエージェントプロセスに配備する場合も同様です。

※ 運用管理コマンドでは、ファイルパスのセパレータ '\' は "\\" として入力する必要があります。

別の例を挙げると、WebOTX AS Standardにおいて、サーバ上でのディレクトリのフルパスが「C:\sample」であるWebアプリケーションをプロセスグループに配備し、その後再配備するには次のようにします。 配備先のアプリケーショングループ名をapgで、プロセスグループ名をpgとしています。

otxadmin> deploydir --apgroup apg --pgroup pg C:\\sample
otxadmin> deploydir --force C:\\sample

オペレーションdeploydirは、システムの開発効率を上げるために提供しています。 そのため本番環境ではdeploydirは利用せずに、deployを利用してください。 オペレーションdeploydirは配備するディレクトリの内容を直接に書き換えてしまうため、配備するディレクトリのバックアップを取ってから実行してください。

4.4.3. 統合運用管理ツールを利用した配備

統合運用管理ツールを利用して、Java EEのアプリケーションを配備する手順を説明します。

  1. 統合運用管理ツールを起動し、ドメインに接続します。 そして画面左側のツリーの「アプリケーション」を選択し、右クリックします。 表示されたメニューから「コンポーネントの配備」を選択します。

  2. コンポーネントタイプを適切に選択してください。 この例では「EJBコンポーネント」を選択しています。 また配備するアーカイブのパスを「ファイル」に記述します。 「参照」ボタンを押下することでダイアログからパスを選択できます。 入力が完了したら「次へ(N)」ボタンを押下します。

  3. WebOTX AS Standardの場合は、配備先のアプリケーショングループとプロセスグループ指定します。 エージェントプロセスに配備する場合は、空白を選択してください。 選択後、「配備(D)」ボタンを押下します。

  4. 配備実行の確認のダイアログが表示されますので「はい(Y)」ボタンを押下してください。

  5. 配備の進行状況が表示された後、終了を示すダイアログが表示されます。

  6. 正常終了した場合、画面左側のツリーにアプリケーション名が表示されます。 以下の画面の例では、「EJBコンポーネント」の子要素として「sample」というアプリケーションが追加されています。 アプリケーションがどの要素の子要素になるのかは、アプリケーションの種類によって異なります。 さらに、WebOTX AS Standardでプロセスグループに配備した場合、プロセスグループの下に「WebOTX Java EEアプリケーション」の子要素としても追加されます。 統合運用管理ツールの設定でプロセスグループ配下へのアプリケーションの表示が無効になっている場合、「WebOTX Java EEアプリケーション」は「アプリケーション」の子要素として表示されます。

4.4.4. 運用管理コンソールを利用した配備

運用管理コンソールを利用して、Java EEのアプリケーションを配備する手順を説明します。

  1. 運用管理コンソールを起動し、ドメインに接続します。 そして画面左側のツリーの「アプリケーション」を選択し、配備画面を表示されます。

  2. コンポーネントタイプを適切に選択してください。 この例では「EJBコンポーネント」を選択しています。

  3. 配備するアーカイブのパスを「ファイル」に記述します。 「参照」ボタンを押下することでダイアログからパスを選択できます。 WebOTX AS Standardの場合は、配備先のアプリケーショングループとプロセスグループ指定します。 エージェントプロセスに配備する場合は、空白を選択してください。 選択後「配備」ボタンを押下します。

  4. 正常終了した場合、画面左側のツリーにアプリケーション名が表示されます。 以下の画面の例では、「EJBコンポーネント」の子要素として「sample」というアプリケーションが追加されています。 アプリケーションがどの要素の子要素になるのかは、アプリケーションの種類によって異なります。 さらに、WebOTX AS Standardでプロセスグループに配備した場合、「WebOTX Java EEアプリケーション」の子要素としても追加されます。

4.4.5. オートデプロイ機能を利用した配備

オートデプロイ機能とは、アプリケーションのアーカイブファイルを次のディレクトリにコピーすることで自動的に配備を行う機能です。

${INSTANCE_ROOT}/autodeploy

配備が成功した場合には、ディレクトリautodeployに、[アーカイブファイル名]_deployedというファイルが作成されます。 また配備が失敗した場合は、[アーカイブファイル名]_deployFailedというファイルが作成されます。 これらのファイルの存在を確認することで、配備が正常に終了したかどうかを調べることができます。

再配備を行う場合は、再配備するアーカイブをディレクトリautodeployに上書きでコピーしてください。 上書きするアーカイブのタイムスタンプは、上書きされるアーカイブのタイムスタンプと異なる必要があります。 同じタイムスタンプのアーカイブで上書きした場合、配備処理は実行されません。

オートデプロイ機能は、配備が実行されるタイミングを制御することができません。 例えば、アーカイブファイルのコピー中にオートデプロイが実行されると、ファイルの内容が不完全であるために配備に失敗します。 そのため、本番環境ではオートデプロイ機能を利用することを推奨していません。 代わりに、deployコマンドや統合運用管理ツール等から明示的に配備を実行してください。

4.4.5.1. 配備先とメソッド識別情報割り当てモードの指定 STD

WebOTX AS Standardでは、配備時にアプリケーショングループとプロセスグループを指定することができます。 オートデプロイ機能で配備先のアプリケーショングループとプロセスグループを指定するには、ディレクトリautodeployに、プロパティファイルautodeploy.propertiesを作成し、内容を適切に設定してください。 プロパティファイルautodeploy.propertiesは、java.util.Propertiesが読み込める形式でなければいけません。 プロパティファイルautodeploy.propertiesはドメイン起動時に読み込まれ、その後変更するたびに再読み込みされます。 プロパティファイルautodeploy.propertiesに記述するプロパティの詳細を以下に示します。

キー 値の説明
apg 登録先アプリケーショングループ名。
(アプリケーション固有の設定が無い場合のデフォルト値として使用されます)
pg 登録先プロセスグループ名。
(アプリケーション固有の設定が無い場合のデフォルト値として使用されます)
methodid メソッド識別情報の割り当てモードの指定。 [ 配備チューニング > EJBのメソッド識別情報の割り当て抑止 STD ] 参照。
(アプリケーション固有の設定が無い場合のデフォルト値として使用されます)
[アーカイブ名].apg [アーカイブ名] のファイルを配備する際の登録先アプリケーショングループ名。
[アーカイブ名].pg [アーカイブ名] のファイルを配備する際の登録先プロセスグループ名。
[アーカイブ名].methodid [アーカイブ名] のファイルを配備する際のメソッド識別情報の割り当てモードの指定。

例えば、全てのアプリケーションをアプリケーショングループmyapg、プロセスグループmypgに配備する場合、autodeploy.propertiesで以下のように指定します。

apg=myapg
pg=mypg

ただし、リソースアダプタやアプリケーションクライアントは [ 配備先の調整 ] により、エージェントプロセスに配備されます。

別の例では、「hello.jar」というアーカイブ名のEJBアプリケーションをアプリケーショングループapg1、プロセスグループpg1にメソッド識別情報割り当てモードをallとして配備し、「sample.war」というアーカイブ名のWebアプリケーションをエージェントプロセスに配備し、その他のアプリケーションをアプリケーショングループapg2、プロセスグループpg2にメソッド識別情報割り当てモードをlimitで配備する場合、autodeploy.propertiesで以下のように指定します。

apg=apg2
pg=pg2
methodid=limit
hello.jar.apg=apg1
hello.jar.pg=pg1
hello.jar.methodid=all
sample.war.apg=
sample.war.pg=
sample.war.methodid=
4.4.5.2. オートデプロイ機能の設定

オートデプロイ機能の各種設定は、${INSTANCE_ROOT}/config/domain.xmlに記述してあります。 このdomain.xmlファイルの要素<das-config>の属性の値を編集することで、設定を変更することができます。 設定の変更は運用管理ツールや運用管理コマンドを使用して行うことができます。 domain.xmlを直接編集する場合はドメインを停止してから行ってください。 属性の詳細は以下の通りです。

属性 既定値 説明
autodeploy-enabled true trueの場合、オートデプロイ機能が有効になります。falseの場合は、オートデプロイ機能は無効になり、動作しません。
autodeploy-polling-interval-in-seconds 2 オートデプロイのためのディレクトリを監視する間隔(ポーリング間隔)です。単位は秒です。
autodeploy-retry-timeout 4 オートデプロイのリトライを中止するまでのタイムアウト時間です。オートデプロイに失敗したアーカイブファイルは、次のポーリング時にリトライされます。これは、アーカイブのコピー中にオートデプロイが実行された場合に、はじめのオートデプロイで失敗しても、コピー完了後に再度オートデプロイを実行するためです。リトライタイムアウト時間が経過すると、以降のオートデプロイのリトライは実行されません。単位は秒です。
autodeploy-dir ${INSTANCE_ROOT}/autodeploy オートデプロイのためのディレクトリを設定します。このディレクトリは、絶対パスを指定します。
autodeploy-jsp-precompilation-enabled false trueの場合、配備中にJSPをコンパイルします。falseの場合、JSPのコンパイルは行いません。この場合はJSPの初回アクセス時に動的にコンパイルを実行します。

4.4.6. ダイナミックリロード機能を利用した再配備

ダイナミックリロード機能はアーカイブファイルが展開された状態のディレクトリ配下の中にあるファイルを直接変更できます。 「オートデプロイ」の項で説明した構成情報ファイル「domain.xml」の同じ「das-config」要素内の中にある下記のダイナミックリロードに関する属性が有効になっていると、サーバは自動的に変更を検知し、アプリケーションを再ロードします。

属性 既定値 説明
dynamic-reload-enabled true trueの場合、「.reload」ファイルのタイムスタンプをチェックし、更新されていればアプリケーションを読み込みなおします。
dynamic-reload-poll-interval-in-seconds 2 ダイナミックリロードのポーリング間隔を指定します。単位は秒です。

WebOTX ASに更新を知らせるためには次の操作を行います。

4.4.7. ホットスワップ機能を利用したアプリケーションの更新

ホットスワップ機能とは、アプリケーションのクラスファイルを更新を検知し、配備を行うことなくアプリケーションの更新を反映する機能です。

ホットスワップ機能を有効にすると、アプリケーションのディレクトリ内のクラスファイルが監視されます。 クラスファイルのタイムスタンプが変更されると、そのクラスファイルからロードされたクラスが再定義されます。
再定義に成功した場合も失敗した場合もログにメッセージが出力されます。 再定義する前に実行中のメソッドは次回実行時に更新が反映されます。 再定義に失敗した場合、再定義前のクラスがそのまま使用されます。

ホットスワップ機能を有効にするには、ドメインに対してホットスワップ機能を有効化した上で、個々のアプリケーションに対してホットスワップ機能を有効化する必要があります。 そのため、ドメイン単位およびアプリケーション単位で、ホットスワップ機能の有効・無効を切り替えることができます。

ホットスワップ機能の各種設定は、${INSTANCE_ROOT}/config/domain.xmlに記述してあります。 このdomain.xmlファイルの要素<das-config>の属性の値を編集することで、設定を変更することができます。 設定の変更は運用管理ツールや運用管理コマンドを使用して行うことができます。 domain.xmlを直接編集する場合はドメインを停止してから行ってください。 属性の詳細は以下の通りです。

属性 既定値 説明
hotswap-enabled false trueの場合、ドメインに対してホットスワップ機能が有効になります。falseの場合は、ホットスワップ機能が無効になり動作しません。
hotswap-polling-interval-in-seconds 2 ホットスワップのためのディレクトリを監視する間隔(ポーリング間隔)です。単位は秒です。

また、domain.xmlファイルの要素<application>の属性の値を編集することで、アプリケーションに対する設定を変更することができます。 設定の変更は運用管理ツールや運用管理コマンドを使用して行うことができます。 domain.xmlを直接編集する場合はドメインを停止してから行ってください。 属性の詳細は以下の通りです。

属性 既定値 説明
hotswap-enabled false trueの場合、アプリケーションのディレクトリをホットスワップ機能の監視対象に追加します。falseの場合は、アプリケーションのディレクトリは監視対象にならず、クラスファイルの更新は検知されません。この設定の変更は、アプリケーションの再起動で反映されます。

アプリケーションに対するホットスワップ機能の設定は、配備時の--hotswapenabledオプションでも行うことができます。

ホットスワップ機能の使用例

アプリケーションがディレクトリ「C:/apps/hello」にwarを展開した形式で存在する場合について説明します。

ディレクトリ構成例は以下の通りです。

C:/apps/hello/
WEB-INF/
classes/
com/
example/
HelloServlet.class
Person.class
web.xml

ホットスワップ機能を有効化する手順は以下の通りです。

[配備時に有効化する場合]

  1. ドメインに対して、ホットスワップ機能を有効化します。
    (すでに有効化されている場合、この手順は不要です)
    otxadmin> set server.admin-service.das-config.hotswap-enabled=true
  2. ホットスワップ機能を有効にしてアプリケーションを配備します。
    otxadmin> deploydir --hotswapenabled C:/apps/hello

[配備後に有効化する場合]

  1. ホットスワップ機能を無効にしてアプリケーションを配備します。
    (--hotswapenabledオプションの既定値はfalseです)
    otxadmin> deploydir C:/apps/hello
  2. ドメインに対して、ホットスワップ機能を有効化します。
    (すでに有効化されている場合、この手順は不要です)
    otxadmin> set server.admin-service.das-config.hotswap-enabled=true
  3. アプリケーションに対して、ホットスワップ機能を有効化します。
    otxadmin> set server.applications.application.hello.hotswap-enabled=true
  4. アプリケーションを再起動することで、アプリケーションがホットスワップの対象になります。
    otxadmin> disable hello
    otxadmin> enable hello

上記の設定を行って、ホットスワップ機能が有効になっている状態で、アプリケーション内のクラスファイル(例: HelloServlet.class)を更新すると、ロード済みのクラスが再定義されます。 再定義に失敗した場合は、失敗原因とともにメッセージがログに出力されます。 なお、更新されたクラスファイルのクラスがまだロードされていない場合は、再定義されません。 その場合は、クラスがロードされるときに更新後のクラスファイルを読み込みます。

上記の例ではディレクトリ展開形式で配備したアプリケーションに対してホットスワップ機能を使用していますが、アーカイブ形式で配備したアプリケーションに対してもホットスワップ機能を使用することができます。

制限事項

4.4.8. コンテキストパス"/" への配備

Java EEのアプリケーションへのアクセスパス(コンテキストパス)は通常パッケージング名(xxxx.war)の拡張子を除いた部分(xxxx)と等価となります。つまり Webブラウザからは

http://<host>/xxxx/

でアクセスすることになります。しかし、http://<host>/ としただけで特定のアプリケーションにアクセスしたい場合があります。このような場合は次のようにします(1 と 2 を実施)。

1) "/" への配備

まず、対象となるアプリケーションを "/" への配備するための設定をします。

※ application.xmlとnec-web.xmlの両方に設定がある場合は、nec-web.xmlが優先されます。

2) "/" にアクセスするための設定

下記2つのコマンドを入力し、ドメイン再起動します。

a) otxadmin> create-jvm-options -Dwebotx.webcontainer.serverconfig.NoRoot=false

b) otxadmin> add-pg-javasystem-property --apgroup [apgroup_name] --javasystemprop webotx.webcontainer.serverconfig.NoRoot --value false [pgroup_name]

【注意点】