3.3.7 トランザクションの結果に関する判断

CORBAオブジェクトは、トランザクション処理の2つの段階で、トランザクションの結果に関与することができます:

  • トランザクションの処理中

    Current.rollback_onlyメソッドを使用すると、現在のトランザクションをロールバックすることが唯一の結果になることが保証されます。Current.rollback_only()は、どのCORBAオブジェクト・メソッドからも呼び出せます。

  • トランザクションの処理終了後

    トランザクションのアクティブ化ポリシーが設定されたCORBAオブジェクトでは、トランザクションの処理終了後にトランザクションをコミットするかロールバックするかを判断できます。これらのオブジェクトには、TPフレームワークが2フェーズ・コミット・アルゴリズムを開始する前で、deactivate_objectメソッドを呼び出すときに、トランザクションの処理が終了したことが通知されます。

    この動作は、processまたはmethodアクティブ化ポリシーのオブジェクトには適用されません。CORBAオブジェクトがトランザクションをロールバックする場合、CORBAオブジェクトはCurrent::rollback_onlyを呼び出します。トランザクションをコミットすることを支持する場合、その呼出しを行いません。ただし、コミットすることを支持してもトランザクションが実際にコミットされるとは限りません。その後、ほかのオブジェクトがトランザクションをロールバックすることを支持する可能性があるからです。

ノート:

SQLカーソルのユーザーは、methodまたはprocessアクティブ化ポリシーを持つオブジェクトを使用する場合には注意する必要があります。プロセスは、クライアントが開始したトランザクション内にSQLカーソルをオープンします。通常のSQLデータベース製品では、クライアントがトランザクションをコミットすると、そのトランザクション内でオープンされたすべてのカーソルが自動的にクローズされますが、オブジェクトはそのカーソルがクローズされたことを示す通知を受け取りません。