OpenTP1 for .NET FrameworkとDBMSとの連携で使用するメソッドは,次に示す順番で発行します。
XAインタフェースによるトランザクション連携は,Extension .NETが提供するRpcクラスおよびTrnクラスと,DABroker for .NET Frameworkデータプロバイダのクラスを組み合わせることで実現します。このときのメソッドの正しい発行順序を,トランザクションシーケンスと呼びます。UAPを作成するユーザは,トランザクションシーケンスを意識する必要があります。トランザクションシーケンスが不正な場合は,次のような障害が発生する可能性があるため,注意してください。
SPP.NETには,次の3種類のメソッドが実装されています。
これらのメソッドの中で,OpenTP1のグローバルトランザクションに参加できるメソッドはサービスメソッドだけです。そのため,XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は,サービスメソッド内で実行してください。InitializeSPPメソッドおよびFinalizeSPPメソッド内では,XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理はできません。また,コネクションの生成およびオープンは,グローバルトランザクションの状態に関係なく実行できます。
なお,XAインタフェースによるトランザクション連携をしないDBMSに対するデータベースアクセス処理は,3種類のメソッド中のどのメソッドでも実行できます。
SPP.NETのトランザクション連携種別を次の図に示します。
図2-5 SPP.NETのトランザクション連携種別
InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置を,次の図に示します。
図2-6 InitializeSPPメソッド内でDBMSと接続する場合のメソッドの発行位置
InitializeSPPメソッド内で作成したコネクションは,FinalizeSPPメソッドまで使用できます。
DABroker for .NET Frameworkを使用してDBMSとトランザクション連携をする場合は,この方式での接続を推奨します。
サービスメソッド内でDBMSと接続する場合は,次の図に示すとおり,コネクションの生成およびオープンだけでなく,データベースアクセス処理,およびコネクションの解放もサービスメソッド内で実行します。
図2-7 サービスメソッド内でDBMSと接続する場合のメソッドの発行位置
この場合,サービスメソッドを実行する場合にだけDBMSと接続するので,リソースの消費を最小限に抑えられます。ただし,コネクションの生成,オープン,および解放をサービスメソッドの呼び出しごとに実行するため,処理に伴うオーバヘッドを考慮する必要があります。
SUP.NETは,次に示す流れに沿って処理をします。
XAインタフェースによるトランザクション連携をするDBMSに対してのデータベースアクセス処理は,4.の部分でだけ実行できます。この場合,コネクションの生成およびオープンも,4.の部分で実行します。
XAインタフェースによるトランザクション連携をしないDBMSに対してのデータベースアクセス処理は,SUP.NETのメイン関数内であればどこでも実行できます。コネクションの生成およびオープンも同様です。
SUP.NETのトランザクション連携種別を次の図に示します。
図2-8 SUP.NETのトランザクション連携種別
DBMSとXAインタフェースによるトランザクション連携をする場合,SUP.NETのトランザクションシーケンスは,次の図のとおりになります。
図2-9 SUP.NETのトランザクションシーケンス