3.3. JavaEE トランザクションクライアントの使用
JavaEE を使用する場合、トランザクションマネージャーと対話するための最も基本的で標準的な方法は、Java Transaction API (JTA) インターフェイス javax.transaction.UserTransaction
です。正規の使用方法は以下のとおりです。
InitialContext context = new InitialContext(); UserTransaction ut = (UserTransaction) context.lookup("java:comp/UserTransaction"); ut.begin(); // Access transactional, JTA-aware resources such as database and/or message broker ut.commit(); // or ut.rollback()
JNDI(Java Naming and Directory Interface) から UserTransaction
インスタンスを取得する方法は、トランザクションクライアントを取得する方法の 1 つです。JavaEE 環境では、たとえば CDI (コンテキストおよび依存性注入) を使用してトランザクションクライアントにアクセスできます。
以下の図は、typica336 Camel アプリケーションを示しています。
以下の図は、Camel コードとアプリケーションコードの両方にアクセスできることを示しています。
-
javax.transaction.UserTransaction
インスタンスは、アプリケーションから直接トランザクションをデマケーションしたり、Spring のTransactionTemplate
クラスを使用してトランザクション対応の Camel コンポーネントを介して内部でデマケーションできます。 -
JDBC API 経由でのデータベースは直接的であるか、たとえば Spring の
JdbcTemplate
を使用するか、camel-jdbc
コンポーネントを使用します。 -
Spring の
JmsTemplate
クラスを使用するか、camel-jms
コンポーネントを使用して直接 JMS API 経由のであるメッセージブローカー。
javax.transaction.UserTransaction
オブジェクトを使用する場合、トランザクションクライアントのみを直接操作しているため、使用されている実際のトランザクションマネージャーを認識する必要はありません。(「トランザクションクライアント」 を参照してください。) Spring のトランザクション機能を内部で使用するため、Spring と Camel では異なるアプローチが使用されます。
JavaEE アプリケーション
一般的な JavaEE シナリオでは、アプリケーションは JavaEE アプリケーションサーバー (通常は WAR
または EAR
アーカイブ) にデプロイされます。JNDI または CDI により、アプリケーションは javax.transaction.UserTransaction
サービスのインスタンスにアクセスできます。その後、このトランザクションクライアントインスタンスを使用してトランザクションを区別します。トランザクション内で、アプリケーションは JDBC または JMS アクセスを実行します。
Camel コンポーネントおよびアプリケーションコード
これらは、JMS/JDBC 操作を実行するコードを表します。Camel には、JMS/JDBC リソースにアクセスするための独自の高度なメソッドがあります。アプリケーションコードは、直接特定の API を使用できます。
JMS Connection Factory
これは、javax.jms.Connection
のインスタンスの取得に使用される javax.jms.ConnectionFactory
インターフェイス、および javax.jms.Session
(または JMS 2.0 の javax.jms.JmsContext
) です。これは、アプリケーションによって直接使用することも、org.springframework.jms.core.JmsTemplate
で内部的に使用する場合もある Camel コンポーネントで間接的に使用することもできます。アプリケーションコードや Camel コンポーネントには、この接続ファクトリーの詳細は必要ありません。接続ファクトリーはアプリケーションサーバーで設定されます。この設定は、JavaEE サーバーで確認できます。Fuse などの OSGi サーバーも同様です。システム管理者は、アプリケーションとは別に接続ファクトリーを設定します。通常、接続ファクトリーはプーリング機能を実装します。
JDBC データソース
これは、java.sql.Connection
のインスタンスを取得するために使用される javax.sql.DataSource
インターフェイスです。JMS と同様に、このデータソースは直接的または間接的に使用できます。たとえば、camel-sql
コンポーネントは org.springframework.jdbc.core.JdbcTemplate
クラスを内部で使用します。JMS と同様に、アプリケーションコードや Camel にはこのデータソースの詳細は必要ありません。この設定は、4章Narayana トランザクションマネージャーの設定 で説明されている方法を使用して、アプリケーションサーバー内または OSGi サーバー内で行われます。