トランザクション クライアントの作成

トランザクション クライアントとは、リソース マネージャーのエクスポートされたインターフェイスを使用して、リソース マネージャーがサポートするデータベースなどのリソースにアクセスするトランザクション処理システム (TPS) コンポーネントを指します。

通常、クライアントはトランザクションを作成し、一連のデータベース操作を実行した後、トランザクションをコミットして操作を永続化します。 クライアントでエラーが発生した場合は、トランザクションをコミットするのではなく、トランザクションをロールバックすることで、トランザクションの操作を削除できます。

通常、カーネルモード KTM を使用するトランザクション クライアントは、トランザクションごとに次のタスクを実行する必要があります。

  1. トランザクション オブジェクトを作成

    ZwCreateTransaction を呼び出すと、トランザクション オブジェクトが作成され、オブジェクト ハンドルが提供され、クライアントがリソース マネージャーに渡してトランザクションを識別できるオブジェクト識別子 (GUID) が割り当てられます。

  2. トランザクション オブジェクトの識別子を取得します。

    クライアントは ZwQueryInformationTransaction を呼び出してオブジェクト識別子を取得できます。

  3. トランザクション オブジェクトの識別子をリソース マネージャーに渡します。

    通常、クライアントはリソース マネージャーのエクスポートされたインターフェイスを呼び出して、リソース マネージャーへの通信パスを開き、そのパスをトランザクションに関連付けます。 たとえば、リソース マネージャーは、TPS コンポーネントの理解に関するトピックで説明されているルーチンに似た CreateDataObject ルーチンを提供できます。

  4. トランザクションに含める操作を実行します。

    通常、クライアントはリソース マネージャーのインターフェイスを呼び出して、リソース マネージャーのリソースにアクセスします。 たとえば、データベース マネージャーのクライアントは、データベースの読み取りと書き込みを行う場合があります。

  5. BAPI トランザクションをコミットまたはロールバックします。

    すべてのリソース操作が成功した場合、クライアントは ZwCommitTransaction を呼び出して操作を永続化する必要があります。 操作が失敗した場合、クライアントは ZwCommitTransaction の代わりに ZwRollbackTransaction を呼び出す必要があります。 たとえば、一連の書き込み操作の 1 つが失敗したとデータベース マネージャーのクライアントが判断した場合、クライアントは書き込み操作が永続化されないように、ZwRollbackTransaction を呼び出す必要があります。

    クライアントは、ZwCommitTransactionZwRollbackTransaction を同期的または非同期的に呼び出すことができます。 クライアントがこれらのルーチンを同期的に呼び出した場合、ルーチンはコミット操作またはロールバック操作が完了するまで戻りません。

    トランザクションをコミットおよびロールバックする方法の詳細については、「トランザクション操作の処理」を参照してください。

  6. トランザクション オブジェクト ハンドルを閉じます。

    クライアントは、トランザクションの処理を完了した後、ZwClose を呼び出してトランザクション オブジェクトのハンドルを閉じる必要があります。

TPS には、複数のリソース マネージャーが含まれる場合があります。 クライアントのトランザクションに、2 つのリソース マネージャーがサポートする 2 つのデータベースなど、複数のリソースに対する操作が含まれている場合、通常、クライアントは次の処理を実行します。

  1. トランザクションごとに 1 つのトランザクション オブジェクトを作成します。

  2. トランザクション オブジェクトの識別子を各リソース マネージャーに渡します。

  3. 各リソース マネージャーのインターフェイスを呼び出して、各データベースに対する操作を実行します。

  4. すべての操作がエラーなしで完了した場合はトランザクションをコミットし、エラーが検出された場合はトランザクションをロールバックします。

TPS に上位トランザクション マネージャーが含まれている場合、トランザクション クライアントは通常、KTM を呼び出しません。 上位トランザクション マネージャーとそのクライアントの詳細については、「上位トランザクション マネージャーの作成」を参照してください。

トランザクション クライアントは、ZwSetInformationTransaction を呼び出してトランザクション固有の情報を設定できます。 たとえば、クライアントはトランザクションのタイムアウト値の設定や、説明的な文字列の指定ができます。 クライアントは ZwQueryInformationTransaction を呼び出して、トランザクションに関する情報を取得できます。 たとえば、クライアントはこのルーチンを呼び出して、トランザクションがコミットされたかロールバックされたかを判断できます。