3.6.3 スケジュール駆動受付でのタスクの呼び出し機能
タスクの呼び出し機能は,タスク情報管理機能からタスクの情報を取得し,スケジュール駆動受付を使用してタスク実行機能を呼び出して,イベント発生時に作成されたタスクを実行します。
タスクの呼び出し機能は,スケジュール駆動受付の状態がactive(開始状態)の場合に開始します。また,スケジュールの実行が終了した場合に停止します。実行中のタスクが存在する場合は,タスクの処理が完了するまで停止しません。
(1) タスクの処理順序
通常の動作では,タスクはイベントが発生した順に処理されます。ただし,イベントの発生時にすでに実行中のタスクがある場合や,実行を待機しているタスクがある場合,イベントが発生した順にタスクが処理されないことがあります。
イベントの発生時にすでに実行中のタスクがある場合は,タスクを「逐次」または「並列」で処理できます。なお,実行中のタスク処理をキャンセルすることはできません。
タスクの処理順序の詳細については,「(2) タスクの逐次処理」および「(3) タスクの並列処理」を参照してください。
スケジュール駆動受付の呼び出し先のビジネスプロセスを同時実行するかどうかによって,タスクの処理順序を選択する必要があります。ビジネスプロセスの同時実行の有無とタスクの処理順序の関係について,次に示します。
|
ビジネスプロセスの同時実行の有無 |
タスクの処理順序 |
|---|---|
|
同時実行できない |
逐次 |
|
同時実行できる |
逐次または並列 |
逐次処理,および並列処理の設定は,スケジュール駆動受付定義ファイルの「urecp-scd.task.processing-max.parallel.count」で設定します。
スケジュール駆動受付定義ファイルの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「3.15.1 スケジュール駆動受付定義ファイル」を参照してください。
(2) タスクの逐次処理
逐次処理では,イベントの発生順に逐次タスクを生成して実行します。
イベントの発生時にすでに実行中のタスクがある場合は,新たにタスクを生成して実行するかどうかを設定できます。新たにタスクを生成して実行するかどうかの設定は,スケジュール駆動受付定義ファイルの「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) イベント発生の間隔を超えてもタスクの処理が終了しない場合
タスクの処理順序が「逐次」で,かつイベント発生の間隔を超えてもタスクの処理が終了しない場合,実行中のタスクがあることを警告メッセージ(KDEC84208-W,KDEC84209-W)としてメッセージログに出力します。なお,スケジュールの実行は継続されます。
また,エラー発生時のタスクの実行の抑止を行う場合で,現在のイベント発生時にエラー発生回数がしきい値を超えているときは,実行中のタスクは存在しません。そのため,警告メッセージ(KDEC84208-W,KDEC84209-W)は出力されません。
(3) タスクの並列処理
並列処理では,イベントの発生時にすでに実行中のタスクがある場合,実行中のタスクの完了を待たないで,次のイベントを発生させます。実行中のタスクがある場合でも,並列でタスクを実行できます。
並列して処理できるタスク数は,スケジュール駆動受付定義ファイルの「urecp-scd.task.processing-max.parallel.count」で設定します。なお,並列して処理できるタスク数を超えた場合,新たなタスクは実行中のタスク処理の完了を待ってから実行されます。
タスクの実行の待機時間は,無制限となります。
|
|
この例では,1回目のタスクの処理時間が,2回目と3回目のイベント発生時刻に重なっています。この場合,1回目のタスクの処理が終了するのを待たないで,2回目のイベントでタスクが生成され,実行されます。また,3回目のイベント発生時刻にすでにタスクが2つ実行されているため,3回目のイベントではタスクの実行が待機され,2回目のイベントのタスク完了後に,3回目のイベントのタスクが実行されます。
(4) エラー発生時のタスクの実行の抑止
タスクの実行時にエラーが発生した場合,エラー発生後のイベント発生時にタスクの実行を抑止することができます。この場合は,待機しているタスクの処理も実行しません。
通常は,スケジュール駆動受付内でエラーが発生した場合(スケジュール機能が異常停止した場合を除く),またはスケジュール駆動受付に例外が返却された場合でも,イベント発生時にはタスクを実行します(タスクの実行は抑止されません)。
エラー発生時にタスクの実行を抑止したい場合は,スケジュール駆動受付定義ファイルのscdrecp.suppress-execution-task.error-occures-thresholdプロパティで設定できます。scdrecp.suppress-execution-task.error-occures-thresholdプロパティの詳細については,マニュアル「サービスプラットフォーム リファレンス」の「3.15.1 スケジュール駆動受付定義ファイル」を参照してください。
また,待機しているタスクがある状態で,タスクの実行が抑止された場合,待機しているタスクに関するイベント履歴ログは出力されません。
(a) タスクの実行が抑止される条件
次に示す条件をすべて満たす場合に,タスクの実行が抑止されます。
-
タスクの処理順序が「逐次」であること
-
スケジュール駆動受付定義ファイルのscdrecp.suppress-execution-task.error-occures-thresholdプロパティで,エラー発生時にタスクの実行を抑止する設定を行っていること
-
タスクの実行時にエラーが発生すること
-
scdrecp.suppress-execution-task.error-occures-thresholdプロパティで設定したエラーが連続で発生した回数のしきい値を超えること
なお,エラーが連続で発生した回数には,ビジネスプロセスの呼び出しでタイムアウトが発生したケースも含みます。
(b) エラーが連続で発生した回数のしきい値の決め方
スケジュール駆動受付定義ファイルのscdrecp.suppress-execution-task.error-occures-thresholdプロパティを設定する場合,一時的な障害が発生した場合を考慮した上で,タスクの実行時にエラーが連続して発生した回数をしきい値として決めてください。それにより,エラー発生時のタスクの実行を抑止することを適切に設定できます。
なお,タスク実行時に複数のエラーが発生した場合であっても,対象のタスク実行でエラーが発生した回数は1回としてカウントされます。例えば,タスクの実行でタイムアウトが発生して,かつビジネスプロセスがエラーとなった場合は,対象のタスク実行でエラーが発生した回数は1回とカウントされます。
しきい値に達するまでに,タスクの実行が正常終了した場合は,タスクの実行時にエラーが連続して発生した回数は0回にリセットされます。また,スケジュール駆動受付やHCSCサーバを再起動した場合も,タスクの実行時にエラーが連続して発生した回数はリセットされます。
(c) 抑止されたタスクの実行を再開する方法
抑止されたタスクの実行を再開する場合は,スケジュール駆動受付を再起動する必要があります。スケジュール駆動受付は,抑止されたタスクの実行を,自動で再開しません。