5.4. XA 登録の問題解決


XA リソースを登録する JTA の標準的な手順は、現在のトランザクションを表す現在の javax.transaction.Transaction オブジェクトに XA リソースを明示的に追加することです。つまり、新しいトランザクションが開始されるたびに XA リソースを明示的に登録する必要があります。

5.4.1. XA リソースの登録方法

XA リソースをトランザクションに登録するには、Transaction インターフェイスで enlistResource() メソッドを呼び出す必要があります。たとえば、TransactionManager オブジェクトおよび XAResource オブジェクトの場合は、以下のように XAResource オブジェクトを登録できます。

// Java
import javax.transaction.Transaction;
import javax.transaction.TransactionManager;
import javax.transaction.xa.XAResource;
...
// Given:
// 'tm' of type TransactionManager
// 'xaResource' of type XAResource

// Start the transaction
tm.begin();

Transaction transaction = tm.getTransaction();
transaction.enlistResource(xaResource);

// Do some work...
...

// End the transaction
tm.commit();

リソース登録が難しい点として、リソースを新しいトランザクション ごと に登録する必要があるので、リソースの使用を開始する前にリソースを登録する必要があります。リソースを明示的に登録すると、エラーが発生しやすいコードに enlistResource() 呼び出しがいくつもある状態になる可能性があります。さらに、適切な場所で enlistResource() を呼び出すことが困難なことがあります。たとえば、トランザクションの詳細の一部を非表示にするフレームワークを使用している場合などです。

5.4.2. 自動登録

XA リソースを明示的に登録する代わりに、XA リソースの自動登録をサポートする機能を使用するほうが簡単かつ安全です。たとえば、JMS および JDBC リソースを使用する場合に、標準の手法として自動登録に対応するラッパークラスを使用することが挙げられます。

JDBC および JMS アクセスの両方で一般的なパターンは次のとおりです。

  1. アプリケーションコードは、JDBC アクセスには javax.sql.DataSource を、JMS での JDBC または JMS 接続には javax.jms.ConnectionFactory が必要です。
  2. アプリケーション/OSGi サーバー内では、これらのインターフェイスのデータベースまたはブローカー固有の実装が登録されます。
  3. アプリケーション/OSGi サーバーは、データベース/ブローカー固有のファクトリーを汎用のプーリングおよび登録ファクトリーに ラップ します。

このようにして、アプリケーションコードは引き続き javax.sql.DataSource および javax.jms.ConnectionFactory を使用しますが、内部的にこれらのコードがアクセスされると、通常は以下に関する追加機能があります。

  • 接続プール: データベース/メッセージブローカーへの新しいコネクションを作成する代わりに、事前に初期化された接続の プール が使用されます。プーリング には、接続の定期的な検証など、もう 1 つの側面があります。
  • JTA 登録 - java.sql.Connection (JDBC) または javax.jms.Connection (JMS) のインスタンスを返す前に、真の XA リソースであれば、実際の接続オブジェクトが登録されます。利用可能な場合、登録は JTA トランザクション内で行われます。

自動登録では、アプリケーションコードを変更する必要はありません。

JDBC データソースおよび JMS 接続ファクトリーのラッパーのプールとエンリストに関する詳細は、6章JDBC データソースの使用 および 7章JMS 接続ファクトリーの作成 を参照してください。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.