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 レジストリーに登録されているサービスと対話します。インターフェイス を介してアクセスされ、これがアプリケーションに関連するすべてです。
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 接続ファクトリーなどの他のサービスを設定および使用する方法について説明します。