次の方法で共有


トランザクションと 2 フェーズ コミットのサポート

COM 用語ウィロジーでは、トランザクションは常にアトミック、一貫性、分離、持続性 (ACID) の作業単位です。 メインフレームの用語では、トランザクションは ACID トランザクションである場合とそうでない場合があります。メインフレーム用語では、トランザクションはトランザクション プログラム (TP) 内の一連の操作またはコマンドです。 この用語の違いは、混乱を招く可能性があります。 TI Manager と TI Designerで使用される"トランザクション" という単語は、常に ACID トランザクションを指します。

2 フェーズ コミット (2PC) は、アプリケーション (またはアプリケーション間) の操作またはコマンドのセットを、すべてロールバックするか、すべて 1 つのトランザクション ユニットとしてコミットできるようにするプロトコルです。

Note

TCP/IP プロトコル経由で TI Automation サーバーを呼び出す場合、2 フェーズ コミット トランザクションはサポートされません。 2 フェーズ コミットは、SNA APPC/LU 6.2 プロトコル経由でのみ機能します。

TI コンポーネントには、次の 4 つのトランザクション プロパティがあります。

  • トランザクションが必要

  • 新しいトランザクションが必要

  • トランザクションをサポートします

  • トランザクションはサポートされていません

    最初の 2 つの選択肢では、メインフレーム TP をトランザクション (つまり ACID プロパティを満たす) と同期レベル 2 をサポートする必要があります。 これは、CICS リンクまたは IMS バージョン 6.0 以降のプログラムである場合、メインフレーム TP に対して透過的です。 3 番目の選択肢では、メインフレーム TP が同期レベル 2 要求をサポートし、トランザクション セマンティクスを適切に処理する必要があります。 4 番目の選択肢は、IMS バージョン 6.0 より前の IMS TP と、同期レベル 0 または同期レベル 1 のみをサポートする CICS TP に必要です。

    TI コンポーネントが COM+ トランザクションのスコープ内で呼び出された場合、TI は CICS との同期レベル 2 の会話を確立します (それ以外の場合は、同期レベル 0 が使用されます)。 これは、TI コンポーネントのクライアントに対して透過的です。 メインフレーム TP が CICS Link プログラムの場合、CICS (CSMI) での IBM のミラー トランザクションは同期レベル 2 プロトコルを処理し、リンク先の TP は同期レベル 0 と同期レベル 2 のどちらを使用しているかは認識されないので、会話のトランザクションの性質も TP に対して透過的になります。

    TI は、クライアントからの各メソッド呼び出しの操作が完了したときに SetComplete または SetAbort を呼び出すことによって、COM+ プログラミング モデルに準拠します。 エラーが検出されなかった場合、TI は SetComplete を呼び出します。それ以外の場合は、SetAbort を呼び出します。 また、メインフレーム TP が、返されるメタデータ エラー ブロックで DisableCommit フラグを設定してトランザクションをコミットしないことを示している場合、TI は SetAbort を呼び出します。 TI Automation クライアント アプリケーションは、トランザクションのコミットを禁止する必要があるアプリケーション レベルの問題があると判断した場合に SetAbort を呼び出すこともできます。

    クライアントのメソッド呼び出しが戻ると、メインフレームの TP は何らかの作業単位を実行しましたが、CICS 内の保護されたリソースに対する変更はまだコミットされていません。 TI では、新しい DTC インターフェイスを使用して、DTC トランザクションに同期レベル 2 の会話を参加させます。 DTC は、トランザクションをコミットまたは中止する準備ができたら、TI と通信して、LU 6.2 の会話で適切な 2 フェーズコミット フローを駆動します。 ここでも、2PC のすべての作業は、クライアントの代わりに TI によって透過的に実行されます。

    メソッドの完了時に TI オブジェクトを非アクティブ化できますが、トランザクションがコミットまたは中止されるまで、会話を維持する必要があります。 アプリケーション コードが 1 つ以上のトランザクション メソッド呼び出しを行っても、トランザクションを長時間コミットしない場合、ユーザーはパフォーマンスに悪影響を及ぼし、システム リソースを関連付けることができます。 会話は、構造化が不十分なユーザー コードによって迅速に使用できます。

    会話がコミットを待機している場合、メッセージ交換は関連付けられたオブジェクトから分離されます。 TI は、これらの "待機中" の会話のプールを管理し、DTC から適切な通知を受信したときに必要な同期レベルの操作を実行します。 可能であれば、TI はこれらの会話を再利用してオーバーヘッドを最小限に抑えます。

    TI には、再同期サービス (SNA LU 6.2 Resync TP) も用意されています。 この Windows サービスは、SNA 定義の再同期 TP (0x06f2) の自動開始呼び出し可能サービスとして構成されています。 再同期サービスは、SNA トランザクション マネージャーの "Exchange ログ名" および "状態の比較" 機能を実装します。 これにより、DTC (分散トランザクション・コーディネーター) と CICS の両方が、システムの始動時またはシステム障害または通信障害の後に、必要に応じてリカバリー・プロセスを開始できます。

    IBM の SNA SyncPoint または 2PC フローの詳細については、「 SNA SyncPoint Services アーキテクチャ リファレンス (IBM SC31-8134-00)」を参照してください。 すべての TI 2PC フローは、このアーキテクチャに準拠して実装されます。

Note

明示的な SYNCPOINT コマンドを使用する CICS リンク TP の使用方法については、「 明示的な SYNCPOINT コマンドを使用した TP」を参照してください。

要約すると、2 フェーズ コミットを使用するには、次のすべての要件を満たす必要があります。

  • ローカル LU とリモート LU はそれぞれ、Host Integration Server ノードで SyncPoint サポートが有効になっている必要があります。

  • ローカル LU とリモート LU は、それぞれ Resync サービスを実行しているコンピューターを指している必要があります。

  • リモート環境 (RE) では、同期レベル 2 のサポートが有効になっている必要があります。 これをチェックするには、TI マネージャーで RE を右クリックし、[プロパティ] をクリックし、[LU 6.2] タブをクリックします。

  • TI コンポーネントには、トランザクション サポートが [サポート対象]、[必須]、または [新規が必要] に設定されている必要があります。 この設定をチェックするには、TI マネージャーで TI コンポーネントを右クリックし、[プロパティ] をクリックし、[トランザクション] タブをクリックします。

  • リモート ホスト コンピューターは、同期レベル 2 のサポート用に構成する必要があります。

参照

WIP プログラミング モデル