2 フェーズ・コミット・トランザクション

Cloud Foundry 環境の Liberty ビルドパックでは、2 フェーズ・コミット (XA) トランザクションは無効になっています。 デフォルトでは、Liberty トランザクション・マネージャーが、トランザクション・ログ・ファイルをローカル・ファイル・システムに書き込みます。 ローカル・ファイル・システムはクラウド・プラットフォームでは一時的であるため、 トランザクション・ログ・ファイルは、アプリケーションまたは Java 仮想マシンが破損すると使用できなくなります。 トランザクション・ログの保管にデータベース・サービスを使用するようにトランザクション・マネージャーを構成できますが、クラウド・プラットフォームはアプリケーションの破損後にアプリケーションのまったく新しいインスタンスを自動的に作成します。 そのため、トランザクション・マネージャーは、失敗したインスタンスのトランザクションを復旧するためにどのログを使用するのかを特定できません。

2 フェーズ・コミット・トランザクションは、EJB Bean またはアプリケーションによる javax.transaction.UserTransaction クラスの使用によって使用できます。 Cloud Foundry 環境で正常に実行するには、アプリケーションが XA トランザクションを必要とするかどうかを確認します。

デフォルトでは、Enterprise JavaBeans (EJB) Bean はコンテナー管理対象であり、Required トランザクション属性が設定されます。これは JTA トランザクションを使用することを意味します。 単一リソースのみが関係する JTA トランザクションは完全にサポートされます。 複数のリソースにまたがる JTA トランザクションは、Cloud Foundry 環境ではサポートされない 2 フェーズ・コミットを必要とします。

Java コードでは、以下の明示的アノテーションが JTA トランザクションの使用を示します。

ejb-jar.xml ファイル内では、以下の明示的エレメントが JTA トランザクションの使用を示します。

注: アプリケーションが javax.transaction.UserTransaction クラスを使用していない場合で、かつ、アプリケーション EJB Bean のすべてが Bean 管理であるか、またはトランザクション属性「Never」または「NotSupported」が指定されたコンテナー管理である場合、アプリケーションは XA トランザクションを使用せず、この規則のフラグ立ては無視できます。

以下の明示的アノテーションまたはエレメントは、EJB Bean が XA トランザクションを使用しないことを示します。