ローカル・トランザクションおよびグローバル・トランザクション
アプリケーションは、Java™ Database Connectivity (JDBC) データ・ソース、接続ファクトリーなどのリソースを使用します。 これらのリソースは、管理コンソールの「リソース」ビューを使用して構成されます。 これらのリソースがどのようにしてグローバル・トランザクションに参加するかは、 基礎となるリソース・プロバイダーのトランザクション・サポートによって異なります。
例えば、ほとんどの JDBC プロバイダーは、XA または XA 以外のいずれかの バージョンのデータ・ソースを提供できます。 非 XA データ・ソースは、リソース・マネージャー・ローカル・トランザクション (RMLT) しか サポートできませんが、XA データ・ソースは、ローカル・トランザクションに加え、2 フェーズ・コミット調整を サポートできます。
![[z/OS]](../images/ngzos.gif)
RMLT のみをサポートする 2
つ以上のリソース・プロバイダーをアプリケーションで使用する場合、これらのリソースは本来
1 フェーズであるため、アトミシティは保証されません。
アトミックな動作を保証するために、アプリケーションは、XA 調整または RRS 調整を
サポートするリソースを使用し、グローバル・トランザクション内で
それらのリソースにアクセスする必要があります。
RMLT のみをサポートする 2
つ以上のリソース・プロバイダーをアプリケーションで使用する場合、これらのリソースは本来
1 フェーズであるため、アトミシティは保証されません。
アトミックな動作を行えるように、アプリケーションは、XA 調整をサポートするリソースを使用し、グローバル・トランザクション内でそれらのリソースにアクセスする必要があります。
アプリケーションが RMLT を 1 つしか使用しない場合、ローカル・トランザクション内包 (LTC) コンテキストでアクセスできるリソース・マネージャーによって、アトミックな動作が保証されます。
リソース・マネージャーが XA 調整をサポートしない場合であっても、アプリケーションは、グローバル・トランザクションのコンテキストで、単一のリソース・マネージャーにアクセスすることもできます。 アプリケーションがこれを行うことができるのは、 アプリケーション・サーバーが「"リソースのみの最適化"」を行い、RMLT のもとでリソース・マネージャーと対話するためです。グローバル・トランザクション・コンテキスト内で、 RMLT のみをサポートするリソース・プロバイダーを 1 つより多く使用しようとすると、 グローバル・トランザクションはロールバックされます。
どのようなときでも、エンタープライズ Bean のインスタンスのグローバル・トランザクション・コンテキストか、ローカル・トランザクション内包コンテキストのいずれかに、未解決の作業が存在することがあります。ただし、そのような作業が両方に存在することはありません。 元のコンテキストにおける未解決の作業がすべて完了した場合、エンタープライズ Bean のインスタンスの実行が、あるタイプのコンテキストから別のタイプのコンテキストへと変更される (逆方向の変更も含む) ことがあります。 この原則に反すると、 エンタープライズ Bean が新規コンテキストを開始しようとするときに、例外がスローされます。