3.5. トランザクションクライアントとトランザクションマネージャー間の OSGi インターフェイス

Warehouse トランザクションクライアント API と Spring Boot トランザクションクライアント API の記述後に、Fuse などの OSGi サーバー内の関係を確認すると便利です。OSGi の機能の 1 つは、グローバルサービスレジストリーで、以下を実行するために使用できます。

  • フィルターまたはインターフェイスでサービスを検索します。
  • 指定されたインターフェイスとプロパティーでサービスを登録します。

Java EE アプリケーションサーバーにデプロイされたアプリケーションが、JNDI (サービスロケータメソッド) を使用して javax.transaction.UserTransaction への参照を取得したり、CDI (依存性注入メソッド) で注入したりするのと同じように、OSGi では、同じ参照 (直接的または間接的) を以下のいずれかの方法で取得できます。

  • org.osgi.framework.BundleContext.getServiceReference() メソッド (サービスロケーター) を呼び出します。
  • それらを Blueprint コンテナーに挿入します。
  • Service Component Runtime(SCR) アノテーション (依存性注入) を使用します。

以下の図は、OSGi ランタイムにデプロイされた Fuse アプリケーションを示しています。アプリケーションコードや Camel コンポーネントは API を使用してトランザクションマネージャー、データソース、および接続ファクトリーへの参照を取得します。

OSGi トランザクションアーキテクチャー

アプリケーション (バンドル) は、OSGi レジストリーに登録されているサービスと対話します。インターフェイス を介してアクセスされ、これがアプリケーションに関連するすべてです。

Fuse では、(直接的または小さなラッパーを介して) トランザクションクライアントインターフェイスを実装する基本オブジェクトは org.jboss.narayana.osgi.jta.internal.OsgiTransactionManager です。以下のインターフェイスを使用してトランザクションマネージャーにアクセスできます。

  • javax.transaction.TransactionManager
  • javax.transaction.UserTransaction
  • org.springframework.transaction.PlatformTransactionManager
  • org.ops4j.pax.transx.tm.TransactionManager

これらのインターフェイスを直接使用するか、Camel などのフレームワークまたはライブラリーを選択して暗黙的に使用することができます。

Fuse で org.jboss.narayana.osgi.jta.internal.OsgiTransactionManager を設定する方法は、4章Narayana トランザクションマネージャーの設定 を参照してください。このガイドの後半の章では、その章の情報に基づいて、JDBC データソースや JMS 接続ファクトリーなどの他のサービスを設定および使用する方法について説明します。