重要なビジネス・リソースの保全性を保護および維持するために、J2EE Connector Architecture リソース・アダプターである IMS Connector for Java では、 グローバル・トランザクション管理および 2 フェーズ・コミット処理をサポートしています。このサポートを使用することで、一連の変更を単一のトランザクションまたは単一の作業単位にグループ化する J2EE アプリケーションをビルドできるため、1 つのトランザクション内のすべての変更は、完全に完了されるか、完全にロールバックされます。これにより、ご使用のアプリケーションを J2EE 対応アプリケーション・ サーバー (たとえば、WebSphere® Application Server) で実行し、整合的な 方法で IMS™ トランザクションおよびデータにアクセスできるようになります。グローバル・トランザクション管理により、IMS 内のデータの保全性が確保されます。
保護リソースに変更を加える場合、変更が正確に行われるという保証が必要です。たとえば、ある銀行の顧客が、預金を普通預金口座から当座預金口座に振り替えるとします。その際、この顧客は、 普通預金口座から金額が差し引かれると同時に、確実に当座預金口座に追加されることを希望します。普通預金口座から差し引かれたものの、当座預金口座には追加されないという、部分的な取り引きの完了は望まないでしょう。
また別の例として、サンフランシスコからパリまでのチケットを買いたい場合に、直行便の空席がないとします。この場合、サンフランシスコからシカゴまでのチケットと、シカゴからパリまで のチケットがきちんと予約できなければ、パリ行きを確定することはできません。つまり、旅程の一部の席のみを確保しても意味がないため、パリまで飛ぶという決定を「ロールバック」します。
どちらの例でも、1 つのトランザクション全体を完了するには、いくつかの小さなトランザクションが必要です。これらの小さなトランザクションのうち 1 つでも問題があれば、 お客様は、そのトランザクション全体 (預金の振り替えやパリ行き) の取り消しを求めるのです。つまり、そのトランザクションのすべてのステップをロールバックして、これらの小さなトランザクションがコミットされないようにする必要があります。正常に預金を振り替えたり、パリまで飛ぶためには、小さなトランザクションをまとめて管理および調整し、すべてのトランザクションを完了することが必要です。
整合的なトランザクション処理を確保するために、J2EE プラットフォーム (J2EE アプリケーション・サーバー、J2EE アプリケーション・コンポーネント、および J2EE コネクター・アーキテクチャー・リソース・アダプターで構成されます) では、分散トランザクション処理環境を提供しています。この環境では、トランザクションは透過的に管理され、リソースは複数のプラットフォームを通じて、 整合的な方法で更新および回復されます。
J2EE 対応アプリケーション・サーバー (例えば、WebSphere Application Server) は、Java™ トランザクション・ マネージャー (外部コーディネーター とも呼ばれます) を 使用して、アプリケーション・コンポーネント (Java サーブレットや Enterprise Java Bean など) と通信したり、リソース・アダプター (IMS Connector for Java など) を 通じてリソース・マネージャー (IMS や DB2® など) と通信したりして、 トランザクションの整合性を維持します。
トランザクション・マネージャーがトランザクションを調整する場合、そのトランザクションは、グローバル・トランザクションとみなされます。トランザクション・マネージャーが複数のリソース・マネージャーを使用してトランザクションを調整する場合、外部コーディネーターは 2 フェーズ・コミット・プロトコルを使用します。
上記の銀行の例では、預金を普通預金口座から当座預金口座に振り 替えようとしました。普通預金口座の情報が、当座預金口座の情報とは異なるリソース・マネージャーにある場合 (たとえば、 普通預金口座の情報が IMS にあり、当座預金口座の情報が DB2 にある場合など)、 アプリケーション・サーバー (WebSphere Application Server) 内のトランザクション・マネージャーが提供する 2 フェーズ・コミット処理によって、 アプリケーションは IMS と DB2 の間の変更を透過的に調整することができます。具体的には、トランザクション・マネージャーは、IMS リソース・アダプターを 使用して、IMS 内の変更を 調整します。
IMS Connector for Java は、J2EE プラットフォーム内の Java トランザクション・マネージャー、 z/OS® のリソース・リカバリー・サービス (RRS)、 および IMS Connect と連動して、IMS や 他の保護リソースに対して、整合性を保つ形で変更を行えるように設計されています。
IMS を 使用した 2 フェーズ・コミット処理に参加するために、IMS Connector for Java は、IMS OTMA 同期レベル同期点プロトコルを使用します。リモート・アプリケーションから変更の要求が行われた場合、 IMS は、 z/OS 上の RRS を使用して、 グローバル・トランザクションおよび 2 フェーズ・コミット処理に参加します。
IMS から見ると、RRS は、 リソースの更新および回復を調整するための「外部コーディネーター」または同期点マネージャーとして機能します。 IMS Connector for Java および IMS Connect は、アプリケーション・サーバーで 実行されている Java トランザクション・マネージャーおよび z/OS 上の RRS と対話して、J2EE プラットフォーム上で実行されているグローバル・トランザクションが、ホスト上で実行されている IMS との整合更新を行えるようにします。
グローバル・トランザクションに参加できるように J2EE アプリケーションを セットアップする場合、IMS Connector for Java と IMS Connect との間で使用することのできる 2 つの通信プロトコルのうちの 1 つを選択する必要があります。 IMS Connector for Java と IMS Connect との通信では、TCP/IP と Local Option の 2 つの通信プロトコルがサポートされます。
グローバル・ トランザクション・スコープでは、J2EE アプリケーション・ コンポーネントは、IMS Connect との TCP/IP 接続を確立することによって、IMS トランザクションにアクセスすることが できます。そのための基礎として、IMS Connector for Java は、X/Open (XA) プロトコルを 使用して Java トランザクション・ マネージャーと対話し、グローバル・トランザクションおよび 2 フェーズ・コミット 処理を管理します。 XA プロトコルは、分散トランザクション処理環境における Java トランザクション・マネージャーとリソース・マネージャーの対話方法を示す、一連のインターフェースと対話を定義します。 IMS Connector for Java と IMS Connect は、XA プロトコルを 使用して、IMS および z/OS 上のソース・リカバリー・サービス (RRS) と 連動し、整合性が保たれた変更を行います。
制約事項: RRS は、IMS Connect と同じ MVS™ システムで実行されている必要があります。
IMS Connect での RRS のセットアップについては、 「IMS Connect 手引きおよび解説書」(SC88-8911) を 参照してください。 グローバル・トランザクションおよび 2 フェーズ・コミット処理のための TCP/IP 通信プロトコルの詳細については、 『プラットフォームおよび通信プロトコルに関する考慮事項』 および『2 フェーズ・コミット環境に関する考慮事項』を参照してください。
J2EE アプリケーション・コンポーネントが WebSphere Application Server for z/OS で実行されている場合、Local Option を使用して IMS トランザクション・メッセージを送信し、グローバル・トランザクション処理に参加することができます。このトランザクション処理は、z/OS 上のリソース・リカバリー・サービス (RRS) と、WebSphere Application Server for z/OS によって調整されます。 IMS Connector for Java は、RRS に対応しており、RRS と共同で作業を行うように 特別に設計されているため、リソース・マネージャーである WebSphere の Java トランザクション・マネージャー および IMS は、 共同で作業を行って、複数の保護リソースに対して整合した変更を行うことができます。 Local Option を使用してグローバル・トランザクションを 実行している場合、XA プロトコルは、IMS Connector for Java では使用されません。
グローバル・トランザクションおよび 2 フェーズ・コミット処理のための Local Option 通信プロトコルの 詳細については、 『プラットフォームおよび通信プロトコルに関する考慮事項』、『2 フェーズ・コミットの前提条件』、および『2 フェーズ・コミット環境に関する考慮事項』を参照してください。
ローカル・トランザクション
J2EE Connection Architecture では、javax.resource.cci.LocalTransaction インターフェース が定義されており、トランザクション・マネージャーではなくリソース・マネージャーが、トランザクションをローカルで調整できるようになっています。しかし、IMS Connector for Java は、トランザクション・マネージャーによるトランザクション調整のみをサポートしています。したがって、IMS Connector for Java は javax.resource.cci.LocalTransaction インターフェースを サポートしていません。 IMSConnection.getLocalTransaction() メソッドを呼び出すと、NotSupportedException が発生します。 IMS Connector for Java でトランザクション・サポートを使用するには、JTA トランザクション・ インターフェースを使用するか、あるいは、ご使用のアプリケーションの デプロイメント記述子で適切なトランザクション属性を設定する必要があります。詳しくは、『ご使用のアプリケーションにおけるグローバル・トランザクション・サポートの使用』を参照してください。
1 フェーズ・コミット処理
IMS Connector for Java は、トランザクション・マネージャーを使用した 1 フェーズ・ コミットの最適化をサポートしています。したがって、あるトランザクション・スコープ内のすべての変更が同一の IMS リソースに属している場合には、 フェーズ 1 準備要求を送信しなくても、フェーズ 2 コミット要求をリソース・マネージャーに直接送信することによって 変更がコミットされるように、トランザクション・マネージャーで 1 フェーズ・コミットの最適化を行うことができます。
グローバルでないトランザクション処理
アプリケーション内でグローバル・トランザクション処理が使用されない場合 (たとえば、トランザクション属性が TX_NOTSUPPORTED に設定されている場合)、 グローバルでないすべてのトランザクション処理で「Sync-On-Return」(OTMA SyncLevel=None) が使用されます。 IMS トランザクションが コミットされたときには、出力はすでにクライアントに戻されています。
グローバル・トランザクション・スコープにおける会話型トランザクション処理
IMSIMS は、会話型プログラムを使用して、 処理を、クライアントからプログラムへ、プログラムからクライアントへという、 一貫性のある連続した対話 (反復とも言います) に分割します。それぞれの反復は、一種の IMS 会話型トランザクションです。会話型処理は、1 つのトランザクショ ンがいくつかのパーツで構成されている場合に使用されます。単一の大きなトランザクションを構成するそれぞれのパーツは、別々にコミットまたはロールバックされます。
グローバル・トランザクション・サポートの使用に関する詳細については、IMS Connector for Java の Web ページ (www.ibm.com/ims) で、『Support』ページの 『Hints and Tips』を参照してください。