3.1.7 チェックドトランザクション
TPBrokerでは,トランザクションの完全性を保証するために,次に示すチェック機能をサポートします。これによってOTSの機能の使用方法に制限が加えられます。ただし,次に示すチェック機能が有効となるのは,暗黙的プロパゲーションを使用する場合だけです。明示的プロパゲーションを使用する場合は,アプリケーションプログラム側でトランザクションの完全性を確保してください。
- 〈この項の構成〉
(1) 応答チェック
トランザクショナルなリクエストからクライアントに応答を返す前に,すべての遅延同期リクエストの応答が受信されているかどうかをチェックします。同期リクエストに関しては,応答が返ってこないと処理が続行されないため,暗黙的に応答が保証されます。チェックの結果,応答を受信していないリクエストが存在する場合,CORBA::TRANSACTION_ROLLEDBACK例外が発生し,そのトランザクションをロールバックします。
(2) リジュームチェック
アプリケーションプログラムが,Currentオブジェクトのresumeオペレーションによってトランザクションコンテキストをスレッドに関連づける前に,このトランザクションコンテキストがそのスレッドで生成されたものか,またはそのスレッドに暗黙的にプロパゲーションされたものかどうかをチェックします。チェックの結果,トランザクションコンテキストが無効な場合,CosTransactions::InvalidControl例外が発生します。
(3) コミットチェック
アプリケーションプログラムからのコミット要求時,コミット処理の開始前に,次に示すチェックをします。
-
トランザクションが生成されたスレッドと同じスレッドからコミット要求が発行されているかどうか。
-
コミット要求が出されているクライアントが,すべての遅延同期リクエストに対する応答を受信済みかどうか。
1.のチェック条件を満たしていない場合,CORBA::INVALID_TRANSACTION例外が発生します。2.のチェック条件を満たしていない場合,CORBA::TRANSACTION_ROLLEDBACK例外が発生します。また,1.の条件を満たしていない場合で,直接コンテキスト管理を使用するときには,Controlオブジェクトのget_terminatorオペレーションでCosTransactions::Unavailable例外が発生するため,コミット要求できません。