3.4.2 ビジネスプロセスの状態の互換性の指定をOFF,サービス呼出アクティビティの状態の互換性の指定をONにした場合のトランザクション
ビジネスプロセスの状態の互換性(HCSCサーバセットアップ定義のbp-status-compatible)にOFF,サービス呼出アクティビティの状態の互換性(HCSCサーバセットアップ定義のbp-invoke-status-compatible)にONを指定した場合のトランザクションについて説明します。
ビジネスプロセスの状態の互換性にOFF,サービス呼出アクティビティの状態の互換性にONを指定した場合は,サービス呼出アクティビティの処理が,開始または完了したタイミングでトランザクションを終了します。ビジネスプロセスのサービス呼出アクティビティ実行中に例外が発生した場合,プロセスインスタンスおよびサービス呼出アクティビティの状態にエラー発生(Error)を設定します。
- 〈この項の構成〉
(1) 同期のサービス呼出アクティビティが2つ並んだ場合
- 正常に処理が進行した場合
-
それぞれのサービス呼出アクティビティでのメッセージ送信処理直前でトランザクションをコミットし,新たにトランザクションを開始します。また,メッセージ送信処理が完了したあとにもトランザクションをコミットし,新たにトランザクションを開始します。
同期のサービス呼出で正常に処理が進行した場合のトランザクションの範囲を次の図に示します。
図3‒26 正常に処理が進行した場合のトランザクションの範囲(同期のサービス呼出) - 例外が発生した場合
-
サービス呼出2の処理が例外でエラーとなった場合は,トランザクションがコミットした時点(受付:完了状態,サービス呼出1:完了状態,サービス呼出2:実行中状態)にロールバックしたあと,プロセスインスタンスおよびサービス呼出アクティビティの状態にエラー発生(Error)を設定して,トランザクションをコミットします。
同期のサービス呼出で例外が発生した場合のトランザクションの範囲を次の図に示します。
図3‒27 例外が発生した場合のトランザクションの範囲(同期のサービス呼出)
(2) 非同期と同期のサービス呼出アクティビティが2つ並んだ場合
- 正常に処理が進行した場合
-
それぞれのサービス呼出アクティビティでのメッセージ送信処理直前でトランザクションをコミットし,新たにトランザクションを開始します。また,メッセージ送信処理が完了したあとにもトランザクションをコミットし,新たにトランザクションを開始します。
非同期と同期のサービス呼出で正常に処理が進行した場合のトランザクションの範囲を次の図に示します。
図3‒28 正常に処理が進行した場合のトランザクションの範囲(非同期と同期のサービス呼出) - 例外が発生した場合(非同期と同期のサービス呼出)
-
サービス呼出2の処理が例外でエラーとなった場合は,トランザクションがコミットした時点(受付:完了状態,サービス呼出1:完了状態,サービス呼出2:実行中状態)にロールバックしたあと,プロセスインスタンスおよびサービス呼出アクティビティの状態にエラー発生(Error)を設定して,トランザクションをコミットします。
非同期と同期のサービス呼出で例外が発生した場合のトランザクションの範囲を次の図に示します。
図3‒29 例外が発生した場合のトランザクションの範囲(非同期と同期のサービス呼出)
(3) 非同期のサービス呼出アクティビティが2つ並んだ場合
- 正常に処理が進行した場合
-
それぞれのサービス呼出アクティビティでのメッセージ送信処理直前でトランザクションをコミットし,新たにトランザクションを開始します。また,メッセージ送信処理が完了したあとにもトランザクションをコミットし,新たにトランザクションを開始します。
非同期のサービス呼出で正常に処理が進行した場合のトランザクションの範囲を次の図に示します。
図3‒30 正常に処理が進行した場合のトランザクションの範囲(非同期のサービス呼出) - 例外が発生した場合
-
サービス呼出2の処理が例外でエラーとなった場合は,トランザクションがコミットした時点(受付:完了状態,サービス呼出1:完了状態,サービス呼出2:実行中状態)にロールバックしたあと,プロセスインスタンスおよびサービス呼出アクティビティの状態にエラー発生(Error)を設定して,トランザクションをコミットします。
非同期のサービス呼出で例外が発生した場合のトランザクションの範囲を次の図に示します。
図3‒31 例外が発生した場合のトランザクションの範囲(非同期のサービス呼出)
(4) 同期のサービス呼出アクティビティのあとにデータ変換アクティビティがある場合
- 正常に処理が進行した場合
-
それぞれのサービス呼出アクティビティでのメッセージ送信処理直前でトランザクションをコミットし,新たにトランザクションを開始します。また,メッセージ送信処理が完了したあとにもトランザクションをコミットし,新たにトランザクションを開始します。
ただし,データ変換アクティビティではトランザクションがコミットしません。これは,「表3-7 トランザクションの開始とコミットのタイミング」で示した以外のアクティビティも同様です。
データ変換などのアクティビティがある場合で正常に処理が進行したときのトランザクションの範囲を次の図に示します。
図3‒32 正常に処理が進行した場合のトランザクションの範囲(データ変換などのアクティビティがある場合) - 例外が発生した場合(データ変換などのアクティビティがある場合)
-
サービス呼出1のあとのデータ変換処理でエラーとなった場合は,トランザクションがコミットした時点(受付:完了状態,サービス呼出1:完了状態,データ変換:未実行状態)までロールバックします。
データ変換などのアクティビティがある場合で例外が発生したときのトランザクションの範囲を次の図に示します。
図3‒33 例外が発生した場合のトランザクションの範囲(データ変換などのアクティビティがある場合)