3.1.4 トランザクションモデル
OTSのトランザクションモデルには,フラットトランザクションとネスティッドトランザクションがあります。
- 〈この項の構成〉
(1) フラットトランザクション
フラットトランザクションとは,「3.1.1 CORBAで規定されたOTSの仕様」で説明したACID特性を持つトランザクションのことであり,X/Open DTPモデルのトランザクションと互換性があります。ネスティッドトランザクションに比べて単純なモデルであり,すべてのトランザクション処理を実現できるため,一般的なアプリケーションプログラムではこのフラットトランザクションを使用してください。
(2) ネスティッドトランザクション
ネスティッドトランザクションとは,トランザクションをネストさせることができるモデルです。トランザクションをネストさせると,部分的なロールバックができます。一つの大きなトランザクション処理を幾つかの処理単位に分割し,ある処理単位が失敗した場合に,その処理単位だけを部分的にロールバックして代替処理を行い,全体のトランザクションをコミットさせます。このため,部分的な障害をトランザクション全体に影響させないようにできます。
このようにネスティッドトランザクションは,高度に分散された単一のトランザクション処理をするシステムで,システム全体のスループットを向上させることができます。
なお,C++実行環境でXAインタフェースおよびTXインタフェースを使用する場合は,このネスティッドトランザクションを使用しないでください。
-
ネスティッドトランザクションでは,あるトランザクションの処理中にサブトランザクションと呼ばれる子トランザクションを生成できます。また,そのサブトランザクションの処理中には,さらにその子となるサブトランザクションを生成できます。
-
親トランザクションと子トランザクション
あるトランザクション中にサブトランザクションを生成したとき,元のトランザクションをそのサブトランザクションに対する親トランザクションと呼び,生成されたサブトランザクションを元の親トランザクションの子トランザクションと呼びます。一つの親トランザクションが複数の子トランザクションを持つことができ,TPBrokerでの一つの親トランザクションが持つことのできる子トランザクションの最大数は256です。トランザクションのネストのレベル(深さ)は最大32レベルです。
-
あるサブトランザクションから,その親を含む,再帰的なすべての親を先祖(ancestor)と呼び,あるトランザクションから,その子を含む,すべての再帰的な子を子孫(descendant)と呼びます。親を持たない最上位のトランザクションのことをトップトランザクションと呼び,トップトランザクションとそのすべての子孫のことをトランザクションファミリーと呼びます。
サブトランザクションがロールバックすると,先祖のトランザクションの意思に関係なく,そのサブトランザクションで行った処理はロールバックされます。サブトランザクションがコミットした場合,その時点では実際にコミットするかロールバックするかは決定されないで,そのサブトランザクションの先祖の意思にゆだねられます。すべての先祖がコミットすればそのサブトランザクションもコミットされますが,先祖のうち一つでもロールバックした場合はそのサブトランザクションもロールバックされます。したがって,あるトランザクションが完了(コミットまたはロールバック)するには,そのすべての子トランザクションが完了していなければなりません。TPBrokerは,トランザクションのコミット要求時にすべての子トランザクションが完了していない場合は,そのトランザクションをロールバックさせます。