Hitachi

uCosminexus Service Coordinator Interactive Workflow BPMN連携機能 使用の手引


1.8.12 タイマーイベント使用時の注意事項

タイマーイベント使用時の,アプリケーション呼び出しサービスに関する注意事項について説明します。

〈この項の構成〉

(1) タイマーイベントの発火時刻の計算方法

ここでは,タイマーイベントの発火時刻の再計算に関する注意事項について説明します。

アプリケーション呼び出しサービスは,タイマーイベントのイベントを発火したあと,実行回数が最大実行回数に達していない場合,次回のイベント発火時刻を再計算します。

注※

イベント発火時刻の再計算とは,現在時刻を基点にタイマールールを再評価して次回のイベント発火時刻を求めることです。

タイマールールが間隔方式の場合,タイマーイベントの次回の発火時刻は,アプリケーション呼び出しサービスが実際にイベント発火を行った時刻を基点として再計算します。

ただし,タイマーイベントの発火時刻と,実際にイベント発火が行われる時刻との間では,最大でアプリケーション呼び出し制御情報の実行間隔分のずれが発生することがあります。このずれは,タイマーイベントの発火を繰り返すことで蓄積します。

実行間隔とタイマーイベントの発火時刻との関係の例を次の図で示します。

図1‒109 発火時刻と実行間隔のずれ(間隔方式の場合)

[図データ]

[説明]
  1. 図中の「タイマーイベントの発火時刻(1)」には2018/1/1 12:00:00が指定されています。しかし,アプリケーション呼び出しサービスによる作業の検索および発火が実際に行われた時刻は,12:00:10です。

  2. 「タイマーイベントの発火時刻(2)」は,前回イベント発火が行われた時刻を基準として計算するため,2018/1/2 12:00:10となり,前回の発火時刻と比べて10秒遅くなります。

  3. 2. によって,「タイマーイベントの発火時刻(2)」には2018/1/2 12:00:10が指定されています。しかし,アプリケーション呼び出しサービスによる作業の検索と発火が実際に行われる時刻は12:00:40になります。

  4. 「タイマーイベントの発火時刻(3)」は,前回イベント発火が行われた時刻を基準として計算するため,2018/1/3 12:00:40となり,前回の発火時刻と比べて30秒遅くなります。

また,アプリケーション呼び出しサービスの停止中にタイマーイベントの発火時刻を過ぎた場合,イベント発火時刻に大きなずれが発生することがあります。アプリケーション呼び出しサービスの停止によって「タイマーイベント発火時刻(3)」が1時間遅くなる例を,次の図に示します。

図1‒110 アプリケーション呼び出しサービスの停止によるイベント発火時刻のずれ(間隔方式の場合)

[図データ]

[説明]
  1. 図中の「タイマーイベントの発火時刻(1)」には2018/1/1 12:00:00が指定されています。発火が実際に行われた時刻は,12:00:00です。

  2. 「タイマーイベントの発火時刻(2)」は,前回イベント発火が行われた時刻を基準として計算するため,2018/1/2 12:00:00となります。しかし,アプリケーション呼び出しサービスが停止しているため,実際に発火した時刻は,停止期間が過ぎた2018/1/2 13:00:00となります。

  3. 「タイマーイベントの発火時刻(3)」は,前回イベント発火が行われた時刻を基準として計算するため,2018/1/3 13:00:00となり,発火時刻が1時間遅くなります。

発火時刻のずれを防ぐには,タイマールールを定期日時方式で指定する必要があります。定期日時方式の場合の計算方法を,次の図に示します。

図1‒111 発火時刻の計算方法(定期日時方式の場合)

[図データ]

[説明]

タイマールールが定期日時方式の場合,間隔方式のようなイベント発火時刻のずれは発生しません。例えば,タイマールールが「毎日12時」の場合,実際のイベント発火時刻が1時間遅れの13時になっても,次のイベント発火時刻は翌日の12時となります。

(2) J2EEアプリケーション停止中にイベント発火時刻を過ぎた場合

アプリケーション呼び出しサービスが停止している期間にタイマーイベントの発火時刻を過ぎた場合の動作について説明します。

アプリケーション呼び出しサービスが停止している期間にタイマーイベントの発火時刻を過ぎた場合,アプリケーション呼び出しサービスの再開始後,最初の実行間隔で,発火時刻を過ぎたタイマーイベントの発火を行います。J2EEアプリケーション停止中に発火時刻が過ぎた場合の例を,次の図で示します。

図1‒112 J2EEアプリケーション停止中に発火時刻が過ぎた場合(実行回数が1回のとき)

[図データ]

最大実行回数が2回以上のタイマールールの場合でも,停止していた期間のタイマーイベントを再開始時に複数回まとめては発火しません。例えば,毎日12:00に発火するタイマーイベントに案件が遷移した状態でアプリケーション呼び出しサービスを3日間停止した場合,アプリケーション呼び出しサービスの再開始後にはタイマーイベントを1回だけ発火します。J2EEアプリケーション停止中に発火時刻が複数回過ぎた場合の例を次の図で示します。

図1‒113 J2EEアプリケーション停止中に発火時刻が過ぎた場合(実行回数が複数回のとき)

[図データ]

(3) ビジネスプロセス定義が「非活性」状態中に開始(タイマー)の発火時刻を過ぎた場合

開始(タイマー)イベントを定義したビジネスプロセス定義が「非活性」状態の期間に,タイマーイベントの発火時刻を過ぎた場合の動作について説明します。

タイマールールが定期日時方式または間隔方式の場合に,「非活性」状態の期間中にイベント発火時刻が過ぎたときの図を次に示します。この場合,イベント発火時刻を過ぎても発火しないで,次回のイベント発火時刻の再計算だけが行われます(図中の(1))。この再計算時,タイマーの実行回数は増やしません。そして,ビジネスプロセス定義を活性化したあと,次のイベント発火時刻を過ぎた時に発火します(図中の(2))。

図1‒114 「非活性」状態中に実行時刻が過ぎた場合(定期日時方式/間隔方式)

[図データ]

タイマールールが固定日時方式の場合は,タイマーイベントの発火時刻は再計算しても変わりません。そのため,ビジネスプロセス定義を活性化したあと,最初の実行間隔でイベント発火が行われます。タイマールールが固定日時方式で,「非活性」状態中に実行時刻が過ぎた場合の動作を次の図で示します。

図1‒115 非活性化中に実行時刻が過ぎた場合(固定日時方式)

[図データ]

(4) 開始(タイマー)イベントの発火失敗時の動作

開始(タイマー)イベントの発火失敗時の動作について説明します。

タイマールールが間隔方式または定期日時方式の場合

間隔方式または定期日時方式のタイマールールが指定された開始(タイマー)イベントの発火が失敗した場合について説明します。ここでは,定期日時方式の場合の例を図で示します。開始(タイマー)イベントの発火が失敗した場合,アプリケーション呼び出しサービスはタイマーイベントの発火時刻を再計算します(図中(1))。イベント発火失敗の原因を取り除き,タイマーイベントの発火時刻を再び過ぎたあと,案件の再投入を試みます(図中(2))。その際,タイマーイベントの発火に失敗した回数は,タイマーの実行回数には含まれません。

図1‒116 タイマーによる案件投入の失敗と回復(定期日時方式の場合)

[図データ]

タイマールールが固定日時方式の場合

固定日時方式のタイマールールが指定された開始(タイマー)イベントの発火が失敗したときについて,次の図で説明します。開始(タイマー)イベントの発火が失敗した場合,タイマーイベントの発火時刻は再計算しても変わりません(図中(1))。このため,アプリケーション呼び出し制御情報に指定した実行間隔の経過後,アプリケーション呼び出しサービスは再びイベント発火を試みます(図中(2))。この動作は,失敗した原因を取り除いてイベント発火が成功するまで繰り返されます(図中(3))。

図1‒117 タイマーによる案件投入の失敗と回復(固定日時方式の場合)

[図データ]

メモ

タイマーによる案件投入の失敗は,案件投入の延長で次のような問題がある場合にが発生します。

  • 分岐条件の評価でエラーが発生した

  • コールアクティビティ情報ファイルの読み込み,または解析でエラーが発生した

  • マルチインスタンスの完了条件(completionCondition)または繰り返し回数(loopCardinality)の評価でエラーが発生した

(5) 開始(タイマー)以外のタイマーイベントの発火失敗時の動作

開始(タイマー)以外のタイマーイベントの発火失敗時の動作について説明します。

開始(タイマー)以外のタイマーイベントの発火が失敗した場合について,次の図で説明します。イベントの発火が失敗した場合,アプリケーション呼び出しサービスはリトライしないで,作業の状態を「作業者実行(PERFORMING)」に変更します(図中(1))。「作業者実行」状態のタイマーイベントは,アプリケーション呼び出しサービスによるイベント発火の対象外となります。タイマーイベントの発火に失敗した回数は,タイマーの実行回数には含めません。

案件の遷移が失敗した原因を取り除いて,作業の状態を「作業者実行」から「実行開始可能(READY)」に変更すると(図中(2)),タイマーイベントは再びアプリケーション呼び出しサービスによるイベント発火の対象となります。そして,次回の実行間隔でイベント発火が行われます(図中(3))。

図1‒118 タイマーイベントの発火失敗と回復

[図データ]

メモ

タイマーイベントの発火の失敗は,遷移の延長で次のような問題があった場合に発生します。

  • 分岐条件の評価でエラーが発生した

  • コールアクティビティ情報ファイルの読み込み,または解析でエラーが発生した

  • マルチインスタンスの完了条件(completionCondition)または繰り返し回数(loopCardinality)の評価でエラーが発生した

(6) ビジネスプロセス定義のタイマールールを変更する場合

ビジネスプロセス定義のタイマールールを変更する方法について説明します。

開始(タイマー)のタイマールールの変更

登録済みのビジネスプロセス定義の開始(タイマー)のタイマールールの変更は,サポートしていません。

開始(タイマー)のタイマールールを変更するには,ビジネスプロセス定義のバージョンを変更して新規登録する必要があります。

開始(タイマー)以外のタイマールールの変更

開始(タイマー)以外のタイマーイベントのタイマールールは,ciweditbpコマンドを使用して変更できます。 ただし,タイマーイベントがすでに待ち状態で,かつイベント発火時刻が決定している場合は,タイマールールを変更してもタイマーイベントの発火時刻はすぐには変更されません。

次に,タイマールールの変更,およびその適用タイミングについて説明します。

タイマールールの変更が適用されるケース

タイマールールの変更が適用される場合の例を,次の図で示します。タイマールールが定期日時方式または間隔方式で,かつ最大実行回数が2回以上の場合,現在設定されているイベント発火時刻(図中(1))を経過したあと,その次のイベント発火時刻の再計算時に新しいタイマールールが適用されます(図中(2))。

図1‒119 タイマールールの変更(最大実行回数2回以上)

[図データ]

タイマールールの変更が適用されないケース

タイマールールが次のように指定されている場合,タイマーイベント発火時刻を再計算するタイミングがないため,タイマールールの変更は適用されません。

  • 固定日時方式の場合

  • 最大実行回数が1回で定期日時方式の場合

  • 最大実行回数が1回で間隔方式の場合

タイマールールが固定日時または最大実行回数1回の場合の例を,次の図に示します。

図1‒120 タイマールールの変更が適用されない場合(固定日時または最大実行回数1回)

[図データ]