ジョブリクエスト制御機能は、ジョブリクエストを実行するコンテナプロセスを決定するまでの経路の制御を行います。

投入されたジョブリクエストは、始めにドメインエージェントがジョブリクエストを受信します。受信したジョブリクエストは、一度ジョブリクエストキューに格納されます。ジョブリクエストキューから取得されたジョブリクエストは、いずれかのコンテナプロセス上で実行が開始されます。 ジョブリクエスト制御機能は、ドメインエージェント上で動作し、ジョブの実行、再実行のジョブリクエストを受信からジョブ実行プロセスへの割当てまでの間の経路制御を行い、ジョブリクエストの状態を管理します。
ジョブリクエスト制御機能として以下の機能を提供しています。
ジョブを投入すると、そのジョブ要求は、バッチドメインエージェントが持つジョブリクエストキューが受信し、格納します。
ジョブリクエストキューには、開始前の状態のジョブリクエストが格納されます。ジョブリクエストキューの 最大サイズ を超える数のジョブリクエストを受信した場合、クライアントには キューイングエラー (ジョブ開始コマンドの場合、戻り値 200)が返されます。
ジョブリクエストの流量制御には、投入されたジョブの実行先となるバッチコンテナを決定する機能や、ジョブの実行を一時停止する閉塞機能があります。
ジョブリクエストキューは、バッチドメインエージェントが受信したジョブリクエストを格納するキューです。
ジョブリクエストキューには、優先度キューとFIFO(先入れ先出し)キューがあります。
優先度キューは、格納されたジョブリクエストの優先度によって順序付けが行われ、優先度の高いジョブリクエストから優先的に取得されます。
FIFOキューは、ジョブリクエストキューへ格納された順番にジョブを取得します。
既定値のジョブリクエストキューは、優先度キューになります。
ジョブリクエストキューは複数個持つことができます。
以下に、ジョブリクエストキューの操作一覧について示します。
| 操作 | 説明 | 操作コマンド |
|---|---|---|
| 作成 | キューを新規に作成します | add-bs-jobrequest-queue |
| 更新 | キューの属性を更新します | set <MOのCLIName>.<MOの属性名> |
| 参照 | キューの属性を参照します | get <MOのCLIName>.<MOの属性名> |
| 削除 | キューを削除します | remove-bs-jobrequest-queue |
| 起動 | キューを起動します | enable-bs-jobrequest-queue |
| 停止 | キューを停止します | disable-bs-jobrequest-queue |
| 閉塞 | キューを閉塞します | change-bs-jobrequest-queue-blocking-status |
| 閉塞解除 | キューを閉塞解除します | change-bs-jobrequest-queue-blocking-status |
| 一覧表示 | キューの識別子、稼動状態、閉塞状態の一覧を参照します | list-bs-jobrequest-queue |
以下を参照してください。
ジョブリクエストキューは稼動状態と閉塞状態の2種類の状態を持ちます。下図はジョブリクエストキューの状態稼動状態・閉塞状態の状態遷移図です。

稼動状態、および、閉塞状態は永続化されません。よって、バッチドメインエージェントの再起動前後において、状態情報は引き継がれません。
稼動状態は、キューの全ての操作に影響を与えます。
キュー要素に関する操作は、稼動状態がENABLEDの場合のみ受け付けます。
各キュー管理系操作毎の挙動については下表の通りです。
| 状態 | 説明 | 作成 | 更新 | 参照 | 削除 | 起動 | 停止 | 閉塞 | 閉塞解除 |
|---|---|---|---|---|---|---|---|---|---|
| ENABLING | 初期化処理実行中です。 | − (※3) |
× | ○ | × | × | × | × | × |
| ENABLED | 有効化された状態です。 | − (※3) |
× | ○ | × | × | ○ | ○ | ○ |
| DISABLING | 無効化中です。 | − (※3) |
× | ○ | × | × | △ (※2) |
× | × |
| DISABLED | 無効化された状態です。 | − (※3) |
○ | △ (※1) |
○ | ○ | × | × | × |
| FAILED | 初期化または無効化に失敗した状態です。 | − (※3) |
○ | △ (※1) |
○ | ○ | × | × | × |
閉塞状態は、稼動状態がENABLEDの部分状態です。稼動状態がENABLEDに遷移すると、初期閉塞状態 に設定された閉塞状態が設定されます。
閉塞状態はキュー要素系操作の挙動にのみ影響を与えます。
| 状態 | 説明 | 挿入 | 取得 | 削除 | 備考 |
|---|---|---|---|---|---|
| OPEN | 閉塞解除状態 | ○ | ○ | ○ | |
| IN_CLOSE | エンキュー閉塞状態 | × | ○ | ○ | |
| OUT_CLOSE | デキュー閉塞状態 | ○ | × | ○ | |
| CLOSE | 閉塞状態 | × | × | ○ |
バッチドメインエージェントは、停止するときにジョブリクエストキューに挿入され、且つ実行中であるかまたは実行待ちの状態であるジョブリクエストを保存することができます。 永続化についての設定方法は、以下のようになります。
| 設定項目 | 説明 | 指定可能範囲 | 既定値 |
|---|---|---|---|
| ジョブリクエスト永続化 | ジョブリクエストを永続化するか否かを決定します。
|
true | false | false |
| ジョブリクエスト復元 | バッチドメインエージェントを起動するときに永続化されたジョブリクエストを復元するか否かを決定します
|
true | false | false |
ジョブリクエスト制御は、バッチドメインエージェントのメモリ上にジョブリクエストの実行履歴を保持することができます。実行履歴の最大保持数は 0 、有限、無制限に設定することができます。 最大保持数を超えた場合、ジョブ実行完了時刻の最も古いジョブリクエストの履歴から順に削除されます。
| 項目 | 説明 | 指定可能範囲 | 既定値 |
|---|---|---|---|
| 終了したジョブリクエストの最大保持数 | バッチドメインエージェント停止時に保存される最大ジョブリクエスト保存数です。 最大保持数を超えた場合、最も古いジョブリクエストから順に削除されます。
|
1 〜 2147483647 | 1024 |
ジョブリクエスト制御がジョブ実行履歴を保持しているか否かは、ジョブ制御UIの動作に影響します。
ジョブの状態一覧取得コマンド(jobctl list-status)は、ジョブリクエスト制御が保持しているジョブ実行履歴を出力します。ジョブ実行履歴が存在しないジョブリクエストの情報は出力されません。
また、ジョブ制御コマンドの --reqid オプションの指定による操作は、ジョブ実行履歴が存在していない場合、実行することができません。
システムの特性および運用要件を基に、ジョブ実行履歴が保持されている必要のある期間(時間)を決定し、以下の関係が成り立つ値を 終了したジョブリクエストの最大保持数 に設定してください。
終了したジョブリクエストの最大保持数 ≧ 単位時間当たりに完了するジョブリクエスト数 × ジョブ実行履歴保持必要時間
ジョブ開始順序の優先度制御機能は、バッチドメインエージェントが受信したジョブリクエストの優先度が、より高いものから順に、ジョブリクエストを開始する制御を行うものです。
ジョブリクエストは5段階の優先度を持ち、利用者はジョブの開始時に優先度を明示的に指定することができます。ジョブリクエストキューに挿入されたジョブリクエストは、その優先度がより高いものから順に取得され、バッチコンテナ上で開始されます。
| 数値表現 | 文字列表現 | 説明 |
|---|---|---|
| 1 | VeryHigh | ↑ |
| 2 | High | |
| 3 | Normal | 既定値 |
| 4 | Low | |
| 5 | VeryLow | ↓ |
優先度が指定されていない場合、および、不正な優先度が指定されている場合、そのジョブリクエストの優先度は、既定値の 3:Normal と判定します。
ジョブリクエストは投入された後、指定されたリクエストキューに挿入されます。また、そのジョブリクエストがジョブを実行するとき、
指定されたジョブ実行プロセスに実行要求をおこないます。
ジョブリクエストの受信からジョブ実行プロセス上で開始されるまでの経路の概略は以下の通りです。

これら一連の動作をジョブリクエスト振分制御と呼びます。
ジョブリクエスト制御は、1,2の判断を行うジョブリクエスト振分制御機能と振分フィルタを提供します。
上図の経路上、1,2のポイントでの判断は、振分フィルタの組合せと振分フィルタ毎の設定とによってカスタマイズすることが可能です。
以下は、その利用例です。
既定値では、単一のジョブリクエストキューの構成で、1,2のポイントでは、以下のような動作となります。
これら一連の動作は、ポリシーアーカイブを作成することによって、振分制御を変更することができます。
ジョブリクエストの受信からジョブリクエストキューへの挿入までの範囲を、「ジョブリクエストキュー振分制御」と呼びます。 ジョブリクエストキュー振分制御は、受信したジョブリクエストを「どのジョブリクエストキューに挿入するか」の絞り込みを行い、最終的に一つのジョブリクエストキューに挿入します。
ジョブリクエストキュー振分ポリシを変更するには、 ジョブリクエストキュー振分ポリシ名 にポリシ名を設定します。
ポリシ名は、 ${DOMAIN_HOME}/config/batch/queue/policies/ディレクトリ直下に配置したポリシアーカイブ のファイル名から拡張子を除いた文字列です。
ジョブリクエストをジョブ実行先で開始するまでの範囲を、「ジョブ実行先振り分け制御」と呼びます。 ジョブ実行先振分制御は、「どのコンテナプロセス上でジョブを開始するか」の絞り込みを行い、1つのコンテナプロセス上でジョブを開始します。
ジョブ実行先振分ポリシを変更するには、 ジョブ実行先振分ポリシ名 にポリシ名を設定します。
ポリシ名は、 ${DOMAIN_HOME}/config/batch/queue/policies/ディレクトリ直下に配置したポリシアーカイブ のファイル名から拡張子を除いた文字列です。
ジョブ実行先振り分け制御によりジョブ実行先の絞込みを行った後に、ジョブ開始要求でエラーが発生した場合、ジョブ開始要求のリトライを行います。
ジョブ開始要求のリトライ回数や、次のジョブ開始要求を行うまでの待ち合わせ時間を設定することが可能です。
リトライ回数が、指定されたジョブ開始要求リトライ回数を超えた場合を、ジョブ開始要求がリトライオーバした状態と呼びます。
リトライオーバ時の動作モードとして以下の3つを用意しています。
以下はリトライ制御に関して設定可能な項目です。
| 項目 | 説明 | 設定可能値/範囲 | 既定値 |
|---|---|---|---|
| ジョブ開始要求リトライ間隔 | ジョブ開始要求でエラーが発生した場合に、次のジョブ開始要求を行うまでの待ち合わせ間隔を秒単位で指定します。 リトライ間隔は、ジョブ開始要求でエラーが発生する毎に、「振分エラー時のジョブ開始要求リトライ間隔増分」増加します。 ジョブ開始要求が正常終了すると、設定値に戻ります。 |
0 〜 3600 | 1 |
| ジョブ開始要求リトライ間隔上限時間 | ジョブ開始要求でエラーが発生した場合に、次のジョブ開始要求を行うまでの待ち合わせ間隔の上限時間を秒単位で指定します。 | 0 〜 3600 | 10 |
| ジョブ開始要求リトライ間隔増分 | ジョブ開始要求でエラーが発生した場合に、増加させる待ち合わせ間隔を秒単位で指定します。 | 0 〜 3600 | 1 |
| ジョブ開始要求リトライ回数 |
単一のジョブリクエストあたりのジョブ開始要求を行うリトライ回数を指定します。
|
-1 〜 60 | 10 |
| ジョブ開始要求リトライオーバ時の動作モード | ジョブ開始要求がリトライオーバとなった場合の動作モードを指定します。
|
|
PUSH_BACK |
ジョブリクエスト受領条件は、受け入れるジョブリクエストの条件を表す文字列の配列です。
ジョブリクエスト受領条件を使用することによって、アカウント毎にジョブリクエストキューを分けアカウント間の隔離性を高めたり、特定のジョブのみを実行する専用のバッチコンテナを設けることによってジョブ間の隔離性を高めることができます。
ジョブリクエスト受領条件は、ジョブリクエストキュー と バッチコンテナ の属性として設定することができます。
既定値の振分ポリシは、ジョブリクエストキュー の ジョブリクエスト受領条件は ジョブリクエストキュー振分制御 で、バッチコンテナ の ジョブリクエスト受領条件は ジョブ実行先振分制御 の振分判断材料として使用(*)しています。
(*) ジョブリクエストパスとターゲットの関連付けに応じた絞込みフィルタが使用しています。
ポリシに、ジョブリクエストパスとターゲットの関連付けに応じた絞込みフィルタ が含まれない場合、ジョブリクエスト受領条件は振分制御に使用されません。
ジョブリクエストパスとターゲットの関連付けに応じた絞込みフィルタは、ジョブリクエスト受領条件の配列の要素に=が含まれている場合、その要素をジョブパラメータと解釈します。その他の場合はジョブリクエストパスパターンと解釈します。
ジョブリクエストパスパターンとは、「/」を区切り文字とし、アカウント名、バッチアプリケーショングループ名、バッチアプリケーション名、ジョブ名 の4つの要素を含む文字列です。各要素にはワイルドカードを表す「*」を含めることが可能です。
例えば、ジョブリクエストパスが user1/bapg1/bap1/job1 かつジョブパラメータ key=value1 が与えられたジョブリクエストの振分を行う際に、 ジョブリクエスト受領条件指定されている文字列による振分動作例を以下に挙げます。
振分ポリシは、振り分け対象の絞り込みを行うフィルタの集合です。
ポリシは、1以上のフィルタおよびその定義から構成され、振分ポリシ定義ファイルで定義します。振分ポリシ定義ファイルはSpring Bean定義形式のxmlファイルで表現されます。
ジョブリクエストキュー振分制御は、 ジョブリクエストキュー振分ポリシ名 に設定されたポリシを用いて行われ、
ジョブ実行先振分制御は、 ジョブ実行先振分ポリシ名 に設定されたポリシを用いて行われます。
利用者が、ポリシをカスタマイズする場合、ポリシ定義ファイルを含む振分ポリシアーカイブを作成し、
${DOMAIN_HOME}/config/batch/queue/policies/ディレクトリ直下に配置後、
ジョブリクエストキュー振分ポリシ名 、 ジョブ実行先振分ポリシ名 にポリシ名を設定します。
ポリシアーカイブは、フィルタBeanの定義を含むポリシ定義ファイルと、クラスファイルにより構成されます。クラスファイルを含めるか否かは任意です。
振分制御では定義されたフィルタ群を以下の順で呼び出します。各フィルタ群で複数のフィルタを定義した場合は、定義された順番に呼び出されます。
ポリシアーカイブには、フィルタBeanの定義を含むポリシ定義ファイルと、クラスファイルにより構成されます。クラスファイルを含めるか否かは任意です。
DOMAIN_HOME/config/batch/queue/policies/ ディレクトリ直下
<ポリシ名>.jar │ policy.xml ポリシ定義ファイル │ ├ classes クラスファイル格納ディレクトリ │ └ lib jarファイル格納ディレクトリ
以下は、振分ポリシ定義ファイルの定義例です。criteriaFilters及びtargetsFiltersは省略することが可能です。
以下のように定義されている場合、Filter Bean1 → Filter Bean2 → Filter Bean3 → Filter Bean4 → Filter Bean5 の順でフィルタの呼び出しが行われます。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<bean id="jobRequestDispatchPolicy"
class="com.nec.webotx.batch.conre.result.policy.TargetPolicy/>
<property name="criteriaFilters">
<list>
<ref bean="Filter Bean1" />
<ref bean="Filter Bean2" />
</list>
</property>
<property name="targetsFilters">
<list>
<ref bean="Filter Bean3" />
<ref bean="Filter Bean4" />
</list>
</property>
<property name="finalFilter">
<ref bean="Filter Bean5" />
</property>
</bean>
<bean id="Filter Bean1"
class="Filter Class名">
</bean>
<bean id="Filter Bean2"
class="Filter Class名">
</bean>
・・・
</beans>
ジョブリクエスト振分フィルタは、振分対象の絞込みを行います。個々の振分フィルタは単純なロジックのみを持ちます。 各フィルタの呼び出し順序と組合せを変更することにより、より複雑な判断が行えるようになります。
| 章番号 | フィルタ名 | フィルタ分類 |
|---|---|---|
| 3.4.3.1 | 未配備状態のジョブに対するジョブリクエスト除外フィルタ | 判断材料フィルタ |
| 3.4.3.2 | アカウントとコンテナ所有者によるコンテナ絞込みフィルタ | ターゲット絞り込みフィルタ |
| 3.4.3.3 | コンテナ稼動状態に応じた絞込みフィルタ | ターゲット絞り込みフィルタ |
| 3.4.3.4 | 配備状態に応じた絞込みフィルタ | ターゲット絞り込みフィルタ |
| 3.4.3.5 | 空きスレッド数0のコンテナプロセスの除外フィルタ | ターゲット絞り込みフィルタ |
| 3.4.3.6 | ジョブリクエストパスとターゲットの関連付けに応じた絞込みフィルタ | ターゲット絞り込みフィルタ |
| 3.4.3.7 | 先頭フィルタ | 単一ターゲットへの絞り込みフィルタ |
| 3.4.3.8 | ラウンドロビンフィルタ | 単一ターゲットへの絞り込みフィルタ |
| 3.4.3.9 | ランダムフィルタ | 単一ターゲットへの絞り込みフィルタ |
| 3.4.3.10 | コンテナプロセス単位の空きスレッド率に応じた絞込みフィルタ | 単一ターゲットへの絞り込みフィルタ |
ジョブリクエストの実行対象のジョブが配備されているか否かをチェックするフィルタです。 配備されていない場合、本フィルタは、 com.nec.webotx.batch.core.execution.request.selector.filter.ApplicationGroupNotFoundException をthrowします。
ジョブリクエストキュー振分制御
ジョブリクエスト投入アカウントとコンテナプロセス所有者が一致する、コンテナの絞込みを行うフィルタです。 絞込みの結果、絞り込みターゲット数が0となった場合、本フィルタはcom.nec.webotx.batch.core.execution.NoSelectableTargetException をthrowします。
ジョブ実行先振分制御
ジョブが実行可能なコンテナプロセスの絞込みを行うフィルタです。 絞込みの結果、絞り込みターゲット数が0となった場合、本フィルタはcom.nec.webotx.batch.core.execution.NoSelectableTargetException をthrowします。
ジョブ実行先振分制御
ジョブリクエストの実行対象のジョブが配備されているコンテナの絞込みを行うフィルタです。 絞込みの結果、絞り込みターゲット数が0となった場合、本フィルタはcom.nec.webotx.batch.core.execution.NoSelectableTargetException をthrowします。
ジョブ実行先振分制御
コンテナプロセスの ジョブ実行スレッド数 と 最大同時実行スレッド数 を参照し、ジョブ実行スレッド数が最大同時実行スレッド数 に達しているコンテナプロセスを除外するフィルタです。 絞込みの結果、絞り込みターゲット数が0となった場合、本フィルタはcom.nec.webotx.batch.core.execution.NoSelectableTargetException をthrowします。
ジョブ実行先振分制御
ターゲット関連定義ファイルに、予め定義されたジョブリクエストパスの各階層とターゲット間の関連付けの設定を基に、 ターゲットの絞込みを行うフィルタです。 以下のジョブリクエストパスの各階層単位で、ターゲットとの関連付けを行うことができます。
ターゲットの配列の先頭を選択するフィルタです。
ラウンドロビンで、ターゲットの決定を行うフィルタです。
ランダムにターゲットの決定を行うフィルタです
コンテナプロセス毎の同時実行スレッド数を参照し、使用可能スレッド数/最大使用可能スレッド数 が最も大きいコンテナに絞込みを行うフィルタです。 絞込みの結果、絞り込みターゲット数が0となった場合、本フィルタはcom.nec.webotx.batch.core.execution.NoSelectableTargetException をthrowします。
ジョブ実行先振分制御
WebOTX BSは実行中のジョブがユーザの期待した時間内に終わらない場合に警告を通知する機能を持っています。通知はWindowsの場合はイベントログ、Linux/HP-UXの場合はSyslogに行います。
ジョブのタイムリミットの指定は、時刻での指定と、実行時間での指定が可能です。ここで指定された時間・時刻を過ぎてもジョブが実行中であった場合に通知を行います。list-statusコマンドを実行すると、ジョブ実行中に指定されているタイムリミットを確認することができます。