Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 TP1/Extension for .NET Framework 使用の手引


2.4.5 トランザクションシーケンス

OpenTP1 for .NET FrameworkとDBMSとの連携で使用するメソッドは,次に示す順番で発行します。

  1. DBMSとのコネクションの生成,オープン

  2. データベースアクセス処理

  3. コネクションの解放

XAインタフェースによるトランザクション連携は,Extension .NETが提供するRpcクラスおよびTrnクラスと,DABroker for .NET Frameworkデータプロバイダのクラスを組み合わせることで実現します。このときのメソッドの正しい発行順序を,トランザクションシーケンスと呼びます。UAPを作成するユーザは,トランザクションシーケンスを意識する必要があります。トランザクションシーケンスが不正な場合は,次のような障害が発生する可能性があるため,注意してください。

〈この項の構成〉

(1) SPP.NETのトランザクションシーケンス

SPP.NETには,次の3種類のメソッドが実装されています。

これらのメソッドの中で,OpenTP1のグローバルトランザクションに参加できるメソッドはサービスメソッドだけです。そのため,XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は,サービスメソッド内で実行してください。InitializeSPPメソッドおよびFinalizeSPPメソッド内では,XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理はできません。また,コネクションの生成およびオープンは,グローバルトランザクションの状態に関係なく実行できます。

なお,XAインタフェースによるトランザクション連携をしないDBMSに対するデータベースアクセス処理は,3種類のメソッド中のどのメソッドでも実行できます。

SPP.NETのトランザクション連携種別を次の図に示します。

図2‒5 SPP.NETのトランザクション連携種別

[図データ]

(a) InitializeSPPメソッド内でDBMSと接続する場合

InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置を,次の図に示します。

図2‒6 InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置

[図データ]

  1. InitializeSPPメソッド内でコネクションを生成,オープンします。

  2. サービスメソッド内でデータベースアクセス処理をします。

  3. FinalizeSPPメソッド内でコネクションを解放します。

InitializeSPPメソッド内で作成したコネクションは,FinalizeSPPメソッドまで使用できます。

DABroker for .NET Frameworkを使用してDBMSとトランザクション連携をする場合は,この方式での接続を推奨します。

(b) サービスメソッド内でDBMSと接続する場合

サービスメソッド内でDBMSと接続する場合は,次の図に示すとおり,コネクションの生成およびオープンだけでなく,データベースアクセス処理,およびコネクションの解放もサービスメソッド内で実行します。

図2‒7 サービスメソッド内でDBMSと接続する場合のメソッドの発行位置

[図データ]

この場合,サービスメソッドを実行する場合にだけDBMSと接続するので,リソースの消費を最小限に抑えられます。ただし,コネクションの生成,オープン,および解放をサービスメソッドの呼び出しごとに実行するため,処理に伴うオーバヘッドを考慮する必要があります。

(2) SUP.NETのトランザクションシーケンス

SUP.NETは,次に示す流れに沿って処理をします。

  1. RPCのオープン

  2. SUP.NETの開始処理の完了報告

  3. トランザクションの開始

  4. サービスの実行

  5. トランザクションの終了

  6. RPCのクローズ

XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は,4.の部分でだけ実行できます。この場合,コネクションの生成およびオープンも,4.の部分で実行します。

XAインタフェースによるトランザクション連携をしないDBMSに対してのデータベースアクセス処理は,SUP.NETのメイン関数内であればどこでも実行できます。コネクションの生成およびオープンも同様です。

SUP.NETのトランザクション連携種別を次の図に示します。

図2‒8 SUP.NETのトランザクション連携種別

[図データ]

  1. RPCのオープン

  2. SUP.NETの開始処理の完了報告

  3. トランザクションの開始

  4. サービスの実行

  5. トランザクションの終了

  6. RPCのクローズ

DBMSとXAインタフェースによるトランザクション連携をする場合,SUP.NETのトランザクションシーケンスは,次の図のとおりになります。

図2‒9 SUP.NETのトランザクションシーケンス

[図データ]