11.28 リソース・マネージャ
ATMI関数を使用してトランザクションを定義すると、Oracle Tuxedoシステムによって内部呼出しが実行され、トランザクションに参加している各リソース・マネージャにグローバル・トランザクション情報が渡されます。tpcommit()
またはtpabort()
などを呼び出すと、各リソース・マネージャに対して内部呼出しが行われ、呼出し側のグローバル・トランザクションのために行われていた作業がコミットまたは中断されます。
グローバル・トランザクションが開始された場合(明示的でも暗黙的でも)、アプリケーション・コードでリソース・マネージャのトランザクション関数を明示的に呼び出すことはできません。このトランザクション規則に従わないと、不安定な結果が生じます。tpgetlev()
関数を使用すると、リソース・マネージャのトランザクション関数を呼び出す前に、グローバル・トランザクション内にすでにプロセスがあるかどうかを確認できます。
リソース・マネージャによっては、トランザクションの整合性レベルなど、特定のパラメータをプログラマが設定できるものがあります。その場合、リソース・マネージャ間のインタフェースで使用可能なオプションを指定します。そのようなオプションは、次の2つの方法で使用できるようになります。
- リソース・マネージャ固有の関数呼出し。分散アプリケーションのプログラマは、これらの関数を使用してオプションを設定することができます。
- ハードコーディングされたオプション。リソース・マネージャのプロバイダで提供されるトランザクション・インタフェースに組み込まれています。
詳細は、リソース・マネージャのドキュメントを参照してください。
オプションの設定方法はリソース・マネージャによって異なります。たとえば、Oracle TuxedoシステムのSQLリソース・マネージャの場合、set transaction
文を使用して、Oracle Tuxedoシステムによってすでに開始されているトランザクションに対する特定のオプション(整合性レベルとアクセス・モード)が決まります。
親トピック: エラーの管理