3.6.2 スケジュール駆動受付でのタスクの実行
スケジュール駆動受付を使用して,イベント発生時に作成されたタスクを実行します。
通常の動作では,タスクはイベントが発生した順に処理されます。ただし,イベントの発生時にすでに実行中のタスクがある場合や,実行を待機しているタスクがある場合,イベントが発生した順にタスクが処理されないことがあります。
イベントの発生時にすでに実行中のタスクがある場合は,タスクを「逐次」または「並列」で処理できます。なお,実行中のタスク処理をキャンセルすることはできません。
タスクの処理順序の詳細については,「(1) タスクの逐次処理」および「(2) タスクの並列処理」を参照してください。
スケジュール駆動受付の呼び出し先のビジネスプロセスを同時実行するかどうかによって,タスクの処理順序を選択する必要があります。ビジネスプロセスの同時実行の有無とタスクの処理順序の関係について,次に示します。
ビジネスプロセスの同時実行の有無 |
タスクの処理順序 |
---|---|
同時実行できない |
逐次 |
同時実行できる |
逐次または並列 |
逐次処理,および並列処理の設定は,スケジュール駆動受付定義ファイルの「urecp-scd.task.processing-max.parallel.count」で設定します。
スケジュール駆動受付定義ファイルの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「3.15.1 スケジュール駆動受付定義ファイル」を参照してください。
- 〈この項の構成〉
(1) タスクの逐次処理
逐次処理では,イベントの発生順に逐次タスクを生成して実行します。
イベントの発生時にすでに実行中のタスクがある場合は,新たにタスクを生成して実行するかどうかを設定できます。新たにタスクを生成して実行するかどうかの設定は,スケジュール駆動受付定義ファイルの「scdrecp.allow.new-task.executing」で設定します。
ただし,次の場合はタスクが実行中であるかを判断できないため,実行中のタスクがあるかどうかに関係なく,新たにタスクを生成する動作となります。
-
HCSCサーバやスケジュール駆動受付を再起動した場合
-
HCSCサーバがクラスタ構成の場合
(a) 新たにタスクを実行する
イベントの発生時にすでに実行中のタスクがあった場合,新たにタスクを生成して実行を試みることができます。スケジュール駆動受付定義ファイルの「scdrecp.allow.new-task.executing」にtrueを設定します。
ただし,実行中のタスクの処理が終了するまで,新たなタスクの実行は,待機状態となります。また,実行中のタスクの処理が終了してから,新たに生成されたタスクと,待機しているタスクの処理順序は不確定です。
タスクの実行の待機時間は,無制限となります。
|
この例では,1回目のタスクの処理時間が,2回目のイベント発生時刻に重なっています。この場合,2回目のイベント発生時刻にタスクが生成されますが,1回目のタスクの処理が終了するまで2回目のイベント処理で生成したタスクは実行されません。3回目のイベントでは,3回目のイベント発生時刻に重なっていたタスクの処理がないため,3回目のイベント発生時刻に,タスクが実行されます。
また,実行を待機しているタスクがある場合,スケジュールは停止しません。待機しているタスクの処理が終了してから,スケジュールが停止します。
|
この例では,1回目のタスクの処理時間が2回目のイベント発生時刻に重なっているため,2回目のイベントで実行するタスク処理の実行を待機します。また,2回目のイベント発生時刻より,あとにスケジュールの停止処理を実行しているため,待機している2回目のタスクの処理が完了してから,スケジュールが停止します。
なお,3回目のイベント発生時刻までに,待機していたタスクの処理が完了しているため,3回目のイベントは発生しません。
(b) 新たにタスクを生成しない
イベントの発生時にすでに実行中のタスクがあった場合,新たにタスクを生成しないときは,スケジュール駆動受付定義ファイルの「scdrecp.allow.new-task.executing」にfalseを設定します。新たにタスクを生成しないときは,実行中のタスクの処理完了後の,次のイベント発生時にタスクが生成され,実行されます。
|
この例では,1回目のタスクの処理時間が2回目のイベント発生時刻に重なっています。2回目のイベント発生時刻にタスクが実行中のため,2回目のイベントではタスクは生成されません。3回目のイベントは,3回目のイベント発生時刻に重なっているタスクがないため,タスクが生成・実行されます。
また,タスクの実行中にスケジュールの停止処理を実行した場合,実行中のタスクの処理が終了したあと,タスクは実行されません。
|
この例では,1回目のタスクの処理時間が2回目のイベント発生時刻に重なっているため,2回目のイベントではタスクを生成されません。また,2回目のイベント発生時刻よりあとにスケジュールの停止処理を実行しているため,スケジュールの停止の実行後はイベントが発生しません。
(c) イベント発生の間隔を超えてもタスクの処理が終了しない場合
タスクの処理順序が「逐次」で,イベント発生の間隔を超えてもタスクの処理が終了しない場合,実行中のタスクがあることをメッセージログに出力します。なお,スケジュールの実行は継続されます。
(2) タスクの並列処理
並列処理では,イベントの発生時にすでに実行中のタスクがある場合,実行中のタスクの完了を待たないで,次のイベントを発生させます。実行中のタスクがある場合でも,並列でタスクを実行できます。
並列して処理できるタスク数は,スケジュール駆動受付定義ファイルの「urecp-scd.task.processing-max.parallel.count」で設定します。なお,並列して処理できるタスク数を超えた場合,新たなタスクは実行中のタスク処理の完了を待ってから実行されます。
タスクの実行の待機時間は,無制限となります。
|
この例では,1回目のタスクの処理時間が,2回目と3回目のイベント発生時刻に重なっています。この場合,1回目のタスクの処理が終了するのを待たないで,2回目のイベントでタスクが生成され,実行されます。また,3回目のイベント発生時刻にすでにタスクが2つ実行されているため,3回目のイベントではタスクの実行が待機され,2回目のイベントのタスク完了後に,3回目のイベントのタスクが実行されます。