第7章 JMS 接続ファクトリーの作成
本章では、OSGi で JMS 接続ファクトリーを使用する方法を説明します。基本的に、以下を使用して実行します。
org.osgi.framework.BundleContext.registerService(javax.jms.ConnectionFactory.class, connectionFactoryObject, properties); org.osgi.framework.BundleContext.registerService(javax.jms.XAConnectionFactory.class, xaConnectionFactoryObject, properties);
このようなサービスを登録する方法は 2 つあります。
-
jms:create
Karaf コンソールコマンドを使用して接続ファクトリーを公開します。これは、設定メソッド です。 -
Blueprint、OSGi Declarative Services (SCR)、または
BundleContext.registerService()
API 呼び出しなどのメソッドを使用して接続ファクトリーをパブリッシュします。この方法では、コードやメタデータを含む専用の OSGi バンドルが必要です。これが、デプロイメントの方法 です。
詳細は以下を参照してください。
7.1. OSGi JMS サービスについて
JDBC データソースを処理する OSGi 方法は、次の 2 つのインターフェイスに関連します。
-
standard
org.osgi.service.jdbc.DataSourceFactory
-
proprietary
org.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory
JMS の場合、以下の推測を考慮します。
-
プロプライエタリー
org.ops4j.pax.jms.service.ConnectionFactoryFactory
: 標準の OSGi JDBCorg.osgi.service.jdbc.DataSourceFactory
と同じ目的。 -
プロプライエタリー
org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
: プロプライエタリー pax-jdbcorg.ops4j.pax.jdbc.pool.common.PooledDataSourceFactory
と同じ目的。
専用のブローカー固有の org.ops4j.pax.jms.service.ConnectionFactoryFactory
実装には、以下のようなバンドルがあります。
-
mvn:org.ops4j.pax.jms/pax-jms-artemis/1.0.0
-
mvn:org.ops4j.pax.jms/pax-jms-ibmmq/1.0.0
-
mvn:org.ops4j.pax.jms/pax-jms-activemq/1.0.0
これらのバンドルは、ブローカー固有の org.ops4j.pax.jms.service.ConnectionFactoryFactory
サービスを登録します。これは、javax.jms.ConnectionFactory
と javax.jms.XAConnectionFactory
など、JMS ファクトリー を返すことができます。以下に例を示します。
karaf@root()> feature:install pax-jms-artemis karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-config OPS4J Pax JMS Config (248) provides: ------------------------------------ objectClass = [org.osgi.service.cm.ManagedServiceFactory] service.bundleid = 248 service.id = 328 service.pid = org.ops4j.connectionfactory service.scope = singleton karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-artemis OPS4J Pax JMS Artemis Support (247) provides: --------------------------------------------- objectClass = [org.ops4j.pax.jms.service.ConnectionFactoryFactory] service.bundleid = 247 service.id = 327 service.scope = singleton type = artemis