ドメイン・コンテナプロセス

概要
バッチドメイン

Batch ServerはWebOTXのユーザドメインとしてバッチドメインを構成します。
バッチドメインに対する運用操作はWebOTX Application Serverと同様に、otxadminコマンドやWebOTX 統合運用管理ツールから操作することができます。
Batch Serverへのジョブ実行要求はバッチドメイン内のエージェントに対して行い、エージェントからバッチコンテナプロセスにそのジョブ実行要求を送信することで、バッチコンテナプロセス上でのジョブ実行を可能にしています。

バッチドメインの構成

バッチドメインは、WebOTX Application Serverと同様の下記サービスによって構成されます。

サービスの名称 Express Edition Standard Edition
JNDIサービス
Object Brokerサービス
Transactionサービス ×

バッチコンテナプロセスは、Transactionサービスとの連携を行うことでバッチコンテナプロセス内での分散トランザクションの実行をサポートしています。 上記それぞれのサービスの詳細はWebOTX Application Serverのマニュアルを参照してください。
バッチドメインを管理するエージェントのことを、WebOTX Application Serverのユーザドメインエージェントと区別しバッチドメインエージェントと呼びます。

バッチコンテナとバッチコンテナプロセス

Batch Serverでは、バッチコンテナという単位でプロセスの起動・停止の制御や、ジョブ実行の振分制御を実施しています。各バッチコンテナはあらかじめ設定されたプロセス多重度にしたがって、複数のプロセスを起動します。これら個別のプロセスのことをバッチコンテナプロセスと呼びます。

バッチコンテナとバッチコンテナプロセス多重度

バッチコンテナプロセスにはバッチコンテナ毎のプロセス識別子(末尾の_<ID>)が付与されます。このバッチコンテナプロセス識別子を利用して、個別のコンテナプロセスを意識した動作の確認や操作を行うことができます。
また、Batch Serverでは個別のバッチコンテナプロセスを特定するための完全名を規定しています。

バッチコンテナプロセス完全名
<バッチコンテナ名>_<プロセス識別子>

関連

1. バッチドメインエージェントの管理

1.1. バッチドメインの起動

バッチドメインエージェントを開始してバッチドメインを起動します。

# otxadmin start-domain batchDomain1
ドメイン batchDomain1 を起動しています。しばらくお待ち下さい。
Redirecting output to /opt/WebOTX/domains/batchDomain1/logs/server.log
ドメイン batchDomain1 はクライアントからの要求を受け付ける準備ができており、追加のサービスがバックグラウンドで開始され ます。
ドメイン [batchDomain1] は実行中です : [WebOTX 8.40.00.00 (build xxxxxxxx)]

    ※ドメイン管理のために(JConsole のような)標準の JMX クライアントは次の JMXServiceURL に接続可能です :
        [service:jmx:rmi:///jndi/rmi://xxxxxxxxx:6312/jmxrmi]

    ※ドメインは少なくとも次のポートを接続のために開放しています :
        [6312].
# 

バッチドメインの起動操作の詳細については、運用ガイド、および、コマンドリファレンスを参照してください。

バッチドメイン起動時に自動起動するバッチコンテナの指定

バッチドメイン起動時に自動起動するバッチコンテナを指定することができます。
バッチドメインの起動と同時に起動するバッチコンテナを制限し、夜間バッチ等実際にジョブを実行する直前にバッチコンテナを起動するような運用も可能になります。

バッチドメイン起動時に自動起動が設定されている全てのバッチコンテナを起動します。全てのバッチコンテナプロセスの起動を待ち合わせてバッチドメインの起動コマンドは完了します。

関連

バッチドメインエージェントのリカバリ

Batch Serverのバッチコンテナプロセスは、バッチドメインエージェントプロセスのみが強制終了した場合であっても稼動し続ける可能性があります。
このようなバッチドメイン管理化のバッチコンテナプロセスが、バッチドメイン起動時に残存していた場合にバッチコンテナプロセスとバッチドメインエージェントの再接続を試みます。

OSサービス経由での起動

OS起動時にバッチドメインを起動する場合、WebOTXの管理ドメインエージェントを経由してバッチドメインを起動します。
詳細はWebOTX Application Serverのマニュアルを参照してください。

ドメイン起動ユーザー

Batch Serverでは、バッチコンテナプロセスの起動ユーザー変更機能やOSによるクライアントの認証を実現するため、バッチドメインエージェントを管理ユーザーにより起動します。

ただし、バッチコンテナプロセス起動ユーザーを変更する必要が無い場合等、いくつかの制限の中で、バッチドメイン起動ユーザーを一般ユーザーに変更することを許可しています。

バッチドメイン起動ユーザーの変更方法

例えば、bsadminユーザ(bsadminグループ)という一般ユーザをドメイン起動ユーザにする場合、 下記のようにAS_INSTALL/domainsディレクトリに書込み権を与え、さらに、DOMAIN_HOME以下全てのファイルの所有者を変更します。
下記は管理ユーザにより実行してください

# chmod o+w /opt/WebOTX/domains
# chown -R bsadmin:bsadmin /opt/WebOTX/domains/batchsv1

その後、bsadmin ユーザで otxadmin start-domainを実行することで、一般ユーザによりバッチドメインを起動することができます。

関連

1.2. ドメインの停止

バッチドメインを停止するにはバッチドメインエージェントを停止します。

# otxadmin stop-domain batchDomain1
ドメイン batchDdomain1 が停止しました。

バッチドメインの停止操作については、運用ガイド、および、コマンドリファレンスを参照してください。

バッチドメイン停止時には稼働中の全てのバッチコンテナプロセスを停止させます。稼働中のバッチコンテナプロセス上でジョブを実行中である場合、下記バッチドメインの停止モードを指定することで実行中のジョブの停止方法を決定することができます。

1.3. ドメインの状態確認

バッチドメインの起動状態を参照するには下記コマンドを実行します。

# otxadmin list-domains
WebOTXAdmin running
batchDomain1 running
コマンド list-domains は正常に実行されました。

2. バッチコンテナの管理

2.1. バッチコンテナの追加

下記の設定を指定してバッチコンテナを追加します。

名前 既定値 説明
コンテナ名 英数字のみ使用可能です。
(指定必須)

バッチコンテナを追加すると下記ディレクトリが新たに生成されます。

ディレクトリ名 説明
DOMAIN_HOME/containers/<バッチコンテナ名>/ コンテナ毎のクラスパスに設定等を格納するディレクトリです
DOMAIN_HOME/containers/<バッチコンテナ名>/<バッチコンテナプロセス完全名>/ バッチコンテナプロセス毎の設定等を格納するディレクトリです。
また、各バッチコンテナプロセスはこのディレクトリをカレントディレクトリとして起動します。
DOMAIN_HOME/containers/<バッチコンテナ名>/lib/* コンテナプロセス内で動作するクラスローダが利用します

2.2. バッチコンテナの削除

バッチコンテナを削除します。
バッチコンテナの削除によってバッチコンテナ追加時に生成された情報やファイルが削除されます。
バッチコンテナを削除する場合、全てのバッチコンテナプロセスを停止させる必要があります。

バッチコンテナ削除時には、バッチコンテナ追加時に作成した下記ディレクトリは削除されません。

上記ディレクトリには、バッチコンテナプロセスのカレントディレクトリが含まれるため、 ジョブ実行時に出力された結果のファイルが生成される可能性があります。
必要なファイルを退避後にディレクトリを削除してください。

2.3. バッチコンテナの設定

バッチコンテナ、および、バッチコンテナプロセスに対して下記設定を変更することができます。

名前 既定値 バッチコンテナ単位 バッチコンテナプロセス単位 説明
バッチコンテナプロセス多重度 1 × 起動するバッチコンテナプロセスの多重度です
バッチコンテナプロセス所有者 × バッチコンテナプロセスのプロセス所有者を指定します。
設定が空の場合、バッチドメインエージェントと同一のユーザーでコンテナプロセスを起動します。
Javaオプション バッチコンテナプロセス起動時に指定するJavaオプションです。
バッチコンテナ、バッチコンテナプロセスの両方に設定を行った場合、同一のキーを使ったKEY=VALUEを指定した場合にのみ、バッチコンテナプロセスの設定で上書きします。キーが重複しない場合は結合された値が設定されます。
起動時のJavaオプションは
環境変数 バッチコンテナプロセス起動時に追加する環境変数です。
バッチコンテナ、バッチコンテナプロセスの両方に設定を行った場合、同一のキーを使ったKEY=VALUEを指定した場合にのみ、バッチコンテナプロセスの設定で上書きします。キーが重複しない場合は結合された値が設定されます。
プロセスのカレントディレクトリ × バッチコンテナプロセス起動時のカレントディレクトリです。

WorkManagerに対する設定

バッチコンテナプロセスには必ず1つのWorkManagerを持ちます。ジョブの実行はWorkManagerによって管理されたスレッドを利用して実行されます。

関連

コンテナ毎のクラスローダ設定

コンテナプロセス内で構成するクラスローダの移譲設定を全てのコンテナ共通で設定することができます。
設定可能な項目は下記のとおりです。

関連

2.4. バッチコンテナの起動

バッチコンテナを起動することで、指定されたプロセス多重度分のバッチコンテナプロセスを起動することができます。

バッチコンテナの一部コンテナプロセスが停止しいている状態でバッチコンテナの起動指示を行った場合、起動状態を確認できないコンテナプロセスのみを起動します。

例えば、コンテナプロセス多重度が3の場合で、各コンテナプロセスが下記のような稼動状態にある場合にコンテナAの起動を指示すると、コンテナA_3のコンテナプロセスのみを起動します。

コンテナA_1 → 稼働中
コンテナA_2 → 稼働中
コンテナA_3 → 停止

バッチコンテナプロセス

各バッチコンテナプロセスは下記のようなJavaプロセスです。

${AS_JAVA}/bin/java ${FINAL_CONTAINER_VM_ARGS} ${LAUNCHER} ${MAIN_CLASS} コンテナ名 コンテナプロセス識別子
各要素には下記内容が設定されます。
名前 説明
AS_JAVA AS_INSTALL/config/asenv.conf で設定したJavaのインストールディレクトリを利用します。
FINAL_CONTAINER_VM_ARGS 下記の設定が順に連結されたものです。
LAUNCHER com.nec.webotx.batch.bootstrap.Launcher の固定値です。
MAIN_CLASS com.nec.webotx.batch.core.domain.container.BatchContainer の固定値です。
コンテナ名 起動するバッチコンテナ名です。
コンテナプロセス識別子 起動するバッチコンテナプロセスの識別子です。

例えば、jps コマンドを使うと下記のように表示され、コンテナプロセス(下記は"container1_1"の場合)のPIDを特定することができます。

# jps -m
<PID>  Launcher com.nec.webotx.batch.core.domain.container.BatchContainer container1 1

コンテナプロセス多重度

ジョブ実行するバッチコンテナはプロセスを多重化することができます。
プロセスを多重化することによって、プロセス障害が発生した場合の影響を極小化することができます。

コンテナプロセスの多重度は動的に変更することができます。
稼動状態のバッチコンテナに対してコンテナプロセス多重度を増加させた場合、増加分のコンテナプロセスを追加起動します。

例えば、コンテナプロセス多重度が3の場合で多重度を4に変更すると、下記のようにコンテナA_4を追加起動します。このとき、コンテナA_1〜3の状態に依らずコンテナA_4が追加されます。

コンテナA_1 → 稼働中
コンテナA_2 → 稼働中
コンテナA_3 → 稼働中
コンテナA_4 → 追加起動

また、稼動状態のバッチコンテナに対してコンテナプロセス多重度を減少させた場合、コンテナ識別子が末尾のコンテナプロセスからタイムアウト無しの通常停止モードでコンテナプロセスを個別に停止させます。
例えば、コンテナプロセス多重度が4の場合で多重度を3に変更すると、下記のようにコンテナA_4を停止させます。このとき、コンテナA_1〜3の状態によらずコンテナA_4が停止します。また、コンテナA_4のプロセス内で実行中の全てのジョブが終了するまでプロセスの停止は待機させられます。待機中の間、コンテナA_4に対する新たなジョブ実行要求は割り当てられなくなり、多重度変更による停止中には該当するバッチコンテナに対する多重度変更要求も受け付けられなくなります。

コンテナA_1 → 稼働中
コンテナA_2 → 稼働中
コンテナA_3 → 稼働中
コンテナA_4 → 通常停止

上記停止待ち状態の場合、コンテナプロセス多重度設定は変更後の3が表示されますが、コンテナプロセスの状態確認を行うとコンテナA_4の状態も表示されます。
多重度減少要求による、コンテナプロセス停止処理の待機にはタイムアウト時間が設定されません。終了を待機しているジョブを早期に終了させるためには、別途ジョブの終了コマンド等を利用してください。

関連

コンテナプロセス起動ユーザー

コンテナプロセス起動ユーザーが指定されている場合、コンテナプロセスのプロセス所有者が指定されているユーザーになるようにプロセスを起動します。
ただし、バッチドメインエージェントプロセスが管理者権限を持たない一般ユーザーで起動されている場合、コンテナプロセスの起動エラーが発生します。

2.5. バッチコンテナの停止

全てのバッチコンテナプロセスを停止させます。
バッチコンテナの停止処理には、以下の3つの停止モードがあります。

バッチコンテナの停止モード
停止モード 説明
NORMAL ノーマル停止モード
実行中のジョブが全て完了するのを待って、バッチコンテナを終了します。
TRANSACTIONAL トランザクショナル停止モード
実行中のジョブをTRANSACTIONALモードで停止し、バッチコンテナを終了します。
FORCE 強制停止モード
実行中のジョブをFORCEモードで終了し、バッチコンテナを終了します。

V8.41.03.00以降、強制停止モードの場合、コンテナの状態に関わらず停止処理を試みます。
強制停止失敗時には、コンテナプロセスの有無に関わらず、コンテナプロセスの状態はNOT_RUNNINGに遷移します。強制停止に失敗した場合、コンテナプロセスの有無を確認してください。強制停止に失敗したコンテナプロセスが存在している状態で、コンテナの起動させないでください。

関連

2.6. バッチコンテナの状態確認

バッチドメインエージェント内でバッチコンテナの状態を管理しています。
このバッチコンテナの状態は各バッチコンテナプロセスの状態から判断します。

バッチコンテナプロセス毎に下記の状態を持ちます。
Batch Serverの各コンポーネントは、バッチコンテナプロセスの状態に応じて処理を行います。

バッチコンテナプロセスの状態
状態 説明
NOT_RUNNING バッチコンテナプロセスが停止している状態です。
STARTING バッチコンテナプロセスに対して開始要求を行った状態です。
RUNNING バッチコンテナプロセスの起動処理が完了し、バッチコンテナプロセスが正常に稼動しています。
この状態のバッチコンテナプロセスでは正常にジョブの実行要求に応じることができます。
BUSY バッチコンテナプロセス内のデフォルトのWorkManagerが持つスレッドプール内の全てのスレッドを利用中です。
この状態のバッチコンテナプロセスはジョブの実行要求を受け付けられない可能性があります(状態は一時的なもののため、実際に処理を実行しようとするタイミングでは、すでに空きスレッドが存在しジョブを実行できる可能性があります)。
STOPPING バッチコンテナプロセスに対して停止要求を行った状態です。
UNKNOWN バッチコンテナプロセスの状態が不明な状態です。

上記バッチコンテナプロセスの状態によってバッチコンテナの状態を下記のように定義しています。

バッチコンテナの状態
状態 説明
NOT_RUNNING 多重度分全てのバッチコンテナプロセスが停止している状態です。
STARTING バッチコンテナの開始要求を受け付けた状態です。
一部のバッチコンテナプロセスによってはすでにSTARTING以外の状態に遷移している状況を含みます。
NORMAL バッチコンテナは正常に稼動しています。
多重度分全てのコンテナプロセスがRUNNING、または、BUSYで、一つ以上のバッチコンテナプロセスがRUNNINGな状況です。
BUSY 全てのバッチコンテナプロセスが最大限のジョブを実行しています。過負荷状態である可能性があります。
多重度分全てのバッチコンテナプロセスがBUSYな状況です。
WARNING 一部のバッチコンテナプロセスで処理を継続している状況を意味します。
一つ以上のバッチコンテナプロセスがRUNNING、または、BUSYで、それ以外のバッチコンテナプロセスのうち、NOT_RUNNINGやUNKNOWNとなったバッチコンテナプロセスが存在する状況です。
STOPPING バッチコンテナの停止要求を受け付けた状態です。
一部のバッチコンテナプロセスによってはすでにSTOPPING以外の状態に遷移している状況を含みます。
UNKNOWN 上記以外の条件で一つでもUNKNOWNなバッチコンテナプロセスが存在する状態です。

二つのバッチコンテナプロセスの状態と、バッチコンテナの状態の関係は以下のとおりです。

バッチコンテナプロセスの状態の組み合わせ と バッチコンテナの状態 の関連
NOT_RUNNING STARTING RUNNING BUSY STOPPING UNKNOWN
NOT_RUNNING NOT_RUNNING STARTING WARNING WARNING STOPPING UNKNOWN
STARTING STARTING STARTING STARTING STARTING STARTING
RUNNING WARNING STARTING NORMAL NORMAL STOPPING WARNING
BUSY WARNING STARTING NORMAL BUSY STOPPING WARNING
STOPPING STOPPING STOPPING STOPPING STOPPING STOPPING
UNKNOWN UNKNOWN STARTING WARNING WARNING STOPPING UNKNOWN

STARTINGとSTOPPINGへの遷移はエージェント内の操作要求と同時に全てのコンテナプロセスの状態をまとめて書き換えます。そのため、あるコンテナプロセスの状態がSTARTING、または、STOPPINGで他のプロセスが異なる状態となるのはまだその処理途中であることを意味します。STARTING、または、STOPPINGのままとなっているコンテナプロセスの状態は、処理が完了するか、タイムアウトすることでバッチコンテナプロセスの状態が遷移し、最終的に別のバッチコンテナ状態へと遷移します。

2.7. バッチコンテナライフサイクル

バッチコンテナプロセスのライフサイクル(起動や停止のタイミング)にあわせて利用者が設定したクラスのメソッドを呼び出す機能を提供します。
WebOTXが提供するcom.nec.webotx.appserv.server.WebOTXLifecycleインタフェースを実装するか、com.nec.webotx.appserv.server.WebOTXLifecycleBaseを継承して独自のクラスを作成してください。
詳細はWebOTXライフサイクルモジュールのAPIリファレンスを参照してください。

ライフサイクルモジュールの実装クラスを梱包したJarファイルをバッチコンテナのクラスパスを設定し、
共通、または、バッチコンテナ毎の下記定義ファイルにライフサイクルモジュールの設定を行います。

  1. DOMAIN_HOME/config/batch/lifecycle.<バッチコンテナ名>properties
  2. DOMAIN_HOME/config/batch/lifecycle.properties

バッチコンテナ毎の設定ファイルと、共通の設定ファイルが存在する場合、 バッチコンテナ毎のファイルに設定されたwebotx.batch.userLifecycle.merge プロパティに応じて 設定をマージします。

各設定ファイルに記載可能な設定項目は以下のとおりです。

プロパティ名 既定値 説明
webotx.batch.userLifecycle.<Num> - ライフサイクルモジュールを実装したクラスのFQCNを指定します。
Numには必ず数値を指定します。
webotx.batch.userLifecycle.isFailureFatal false ライフサイクルモジュールのコールバック内で例外を返した場合に、 バッチコンテナプロセスを異常終了させるかどうかを設定します。
webotx.batch.userLifecycle.merge true コンテナ単位の設定をマージするかどうかを指定します。
trueが指定されている場合、共通の設定に記載されたライフサイクルモジュールの一覧をマージします。 重複して指定されたFQCNは一つのみ有効になります。
この設定はコンテナ毎の設定ファイル(lifecycle.properties)でのみ有効です。
関連

3. ドメインエージェントの復旧

Batch Serverのドメインエージェントのプロセスが障害等により異常終了した場合、ジョブを実行中のコンテナプロセスは可能な限りジョブの実行を継続します。
ドメインを復旧させるには、障害の原因を取り除いた後に通常のドメイン起動操作を実施します。
このとき、すでに稼動中のコンテナプロセスに対して再接続し該当するドメインの管理化に復旧させます。

4. ドメインの構成

各ドメインは下記ディレクトリ構成になります。

ディレクトリ名 説明
DOMAIN_HOME
 apps.internal バッチアプリケーション管理の制御ファイル格納ディレクトリ
backup ドメイン定義情報のバックアップ
bin バッチコンテナプロセス起動コマンド格納用
config ドメイン定義情報格納用
 batch Batch Server固有情報格納用
containers バッチコンテナ設定情報格納用
defaultRepo デフォルト設定のドメインが利用するDerby定義情報格納ディレクトリ
lib ユーザライブラリ格納ディレクトリ
logs ログ出力ディレクトリ
var Batch Server制御情報格納ディレクトリ
addons Batch Serverでは利用しません
applications
autodeploy
docroot
generated
session-store
stats
wojms

5. バッチコンテナのプロセス実行環境ログ

バッチコンテナプロセス起動時に、プロセス毎の下記情報をログに記録しています。

バッチコンテナプロセスを起動する度に、下記ログファイルへ追記されます。

DOMAIN_HOME/logs/batch/<コンテナ名>/environments_<コンテナプロセス識別子>.log