7.5. JMS 接続プールの使用
本セクションでは、JMS 接続/セッションプーリングオプションを説明します。JDBC の場合よりも選択肢が少なくなります。情報は次のトピックに分けてまとめられています。
XA リカバリーを使用するには、pax-jms-pool-transx
または pax-jms-pool-narayana
接続プールモジュールを使用する必要があります。
7.5.1. JMS 接続プールの使用
これまで、ブローカー固有の接続 ファクトリー を登録しました。接続ファクトリー自体は 接続ファクトリー のファクトリーであるため、org.ops4j.pax.jms.service.ConnectionFactoryFactory
サービスはメタファクトリーとして扱われる可能性があります。2 種類の接続ファクトリーを生成できるはずです。
-
javax.jms.ConnectionFactory
-
javax.jms.XAConnectionFactory
pax-jms-pool-*
バンドルは、org.ops4j.pax.jms.service.ConnectionFactoryFactory
サービスとスムーズに連携します。これらのバンドルは、org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
の実装を提供し、これで、プロパティーと、元の org.ops4j.pax.jms.service.ConnectionFactoryFactory
を wrapper のように使用して、プール接続ファクトリーを作成できます。以下に例を示します。
public interface PooledConnectionFactoryFactory { ConnectionFactory create(ConnectionFactoryFactory cff, Map<String, Object> props); }
以下の表は、プールされた接続ファクトリーファクトリーを登録するバンドルを示しています。この表では、o.o.p.j.p
は org.ops4j.pax.jms.pool
を表します。
バンドル | PooledConnectionFactoryFactory | プールキー |
---|---|---|
|
|
|
|
|
|
|
|
|
pax-jms-pool-narayana
ファクトリーは PooledJms(XA)PooledConnectionFactoryFactory
と呼ばれ、pooled-jms
ライブラリーに基づいています。これにより、XA リカバリーのための Narayana トランザクションマネージャーとの統合が追加されます。
上記のバンドルは接続ファクトリーファクトリーのみをインストールします。接続ファクトリー自体をインストールしないバンドルです。そのため、javax.jms.ConnectionFactory org.ops4j.pax.jms.service.PooledConnectionFactoryFactory.create()
メソッドを呼び出すものが必要になります。
7.5.2. pax-jms-pool-pooledjms 接続プールモジュールの使用
pax-jms-pool-pooledjms
バンドルの使用方法を理解することで、pax-jms-pool-pooledjms
バンドルだけでなく、pax-jms-pool-narayna
バンドルも使用できるので、pax-jms-pool-pool-pooledjms
としてほぼすべてが機能します。
pax-jms-config バンドルは以下を追跡します。
-
org.ops4j.pax.jms.service.ConnectionFactoryFactory
services -
org.ops4j.connectionfactory
factory PIDs -
pax-jms-pool-*
バンドルのいずれかによって登録されるorg.ops4j.pax.jms.service.PooledConnectionFactoryFactory
のインスタンス。
ファクトリー設定 に pool
プロパティーが含まれる場合、pax-jms-config
バンドルによって登録される最終的な接続ファクトリーはブローカー固有の接続ファクトリーです。pool=pooledjms
の場合、接続ファクトリーは以下のいずれかの内部でラップされます。
-
org.messaginghub.pooled.jms.JmsPoolConnectionFactory
(xa=false
) -
org.messaginghub.pooled.jms.JmsPoolXAConnectionFactory
(xa=true
)
pool
プロパティー (および非 xa/xa 接続ファクトリーの 1 つを選択するブール値 xa
プロパティー) のほかに、org.ops4j.connectionfactory
ファクトリー PID には pool.
で始まるプロパティーが含まれる場合があります。
pooled-jms
ライブラリーでは、これらの接頭辞が付いたプロパティーを使用して (接頭辞を削除した後に)、以下のインスタンスを設定します。
-
org.messaginghub.pooled.jms.JmsPoolConnectionFactory
または -
org.messaginghub.pooled.jms.JmsPoolXAConnectionFactory
以下のリストは、jms.
で始まるプロパティーと便利な構文を使用する pooled-jms
プール (org.ops4j.connectionfactory-artemis
ファクトリー PID) の現実的な設定です。
# configuration for pax-jms-config to choose and configure specific org.ops4j.pax.jms.service.ConnectionFactoryFactory name = jms/artemis connectionFactoryType = ConnectionFactory jms.url = tcp://localhost:61616 jms.user = fuse jms.password = fuse # org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory specific coniguration jms.callTimeout = 12000 # ... # hints for pax-jms-config to use selected org.ops4j.pax.jms.service.PooledConnectionFactoryFactory pool = pooledjms xa = false # pooled-jms specific configuration of org.messaginghub.pooled.jms.JmsPoolConnectionFactory pool.idleTimeout = 10 pool.maxConnections = 100 pool.blockIfSessionPoolIsFull = true # ...
上記の設定では、pool
と xa
キーは ヒント (サービスフィルタープロパティー) で、登録された org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
サービスのいずれかを選択します。pooled-jms
ライブラリーの場合、以下が行われます。
karaf@root()> feature:install pax-jms-pool-pooledjms karaf@root()> bundle:services -p org.ops4j.pax.jms.pax-jms-pool-pooledjms OPS4J Pax JMS MessagingHub JMS Pool implementation (252) provides: ------------------------------------------------------------------ objectClass = [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] pool = pooledjms service.bundleid = 252 service.id = 331 service.scope = singleton xa = false ----- objectClass = [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] pool = pooledjms service.bundleid = 252 service.id = 335 service.scope = singleton xa = true
以下は、接続プールを作成して設定する手順の完全な例です。
必要な機能をインストールします。
karaf@root()> feature:install -v pax-jms-pool-pooledjms pax-jms-artemis Adding features: pax-jms-pool-pooledjms/[1.0.0,1.0.0] ...
jms
機能をインストールします。karaf@root()> feature:install jms karaf@root()> service:list org.ops4j.pax.jms.service.ConnectionFactoryFactory [org.ops4j.pax.jms.service.ConnectionFactoryFactory] ---------------------------------------------------- service.bundleid = 249 service.id = 327 service.scope = singleton type = artemis Provided by : OPS4J Pax JMS Artemis Support (249) karaf@root()> service:list org.ops4j.pax.jms.service.PooledConnectionFactoryFactory [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] ---------------------------------------------------------- pool = pooledjms service.bundleid = 251 service.id = 328 service.scope = singleton xa = false Provided by : OPS4J Pax JMS MessagingHub JMS Pool implementation (251) [org.ops4j.pax.jms.service.PooledConnectionFactoryFactory] ---------------------------------------------------------- pool = pooledjms service.bundleid = 251 service.id = 333 service.scope = singleton xa = true Provided by : OPS4J Pax JMS MessagingHub JMS Pool implementation (251)
ファクトリー設定 を作成します。
karaf@root()> config:edit --factory --alias artemis org.ops4j.connectionfactory karaf@root()> config:property-set connectionFactoryType ConnectionFactory karaf@root()> config:property-set osgi.jndi.service.name jms/artemis karaf@root()> config:property-set type artemis karaf@root()> config:property-set protocol amqp # so we switch to org.apache.qpid.jms.JmsConnectionFactory karaf@root()> config:property-set jms.url amqp://localhost:61616 karaf@root()> config:property-set jms.username admin karaf@root()> config:property-set jms.password admin karaf@root()> config:property-set pool pooledjms karaf@root()> config:property-set xa false karaf@root()> config:property-set pool.idleTimeout 10 karaf@root()> config:property-set pool.maxConnections 123 karaf@root()> config:property-set pool.blockIfSessionPoolIsFull true karaf@root()> config:update
pax-jms-config
が設定を処理してjavax.jms.ConnectionFactory
サービスに指定しているかどうかを確認します。karaf@root()> service:list javax.jms.ConnectionFactory [javax.jms.ConnectionFactory] ----------------------------- connectionFactoryType = ConnectionFactory felix.fileinstall.filename = file:${karaf.etc}/org.ops4j.connectionfactory-artemis.cfg jms.password = admin jms.url = amqp://localhost:61616 jms.username = admin osgi.jndi.service.name = jms/artemis pax.jms.managed = true pool.blockIfSessionPoolIsFull = true pool.idleTimeout = 10 pool.maxConnections = 123 protocol = amqp service.bundleid = 250 service.factoryPid = org.ops4j.connectionfactory service.id = 347 service.pid = org.ops4j.connectionfactory.fc1b9e85-91b4-421b-aa16-1151b0f836f9 service.scope = singleton type = artemis Provided by : OPS4J Pax JMS Config (250)
接続ファクトリーを使用します。
karaf@root()> jms:connectionfactories JMS Connection Factory ────────────────────── jms/artemis karaf@root()> jms:info -u admin -p admin jms/artemis Property │ Value ─────────┼──────────────── product │ QpidJMS version │ 0.30.0.redhat-1 karaf@root()> jms:send -u admin -p admin jms/artemis DEV.QUEUE.1 "Hello Artemis" karaf@root()> jms:browse -u admin -p admin jms/artemis DEV.QUEUE.1 Message ID │ Content │ Charset │ Type │ Correlation ID │ Delivery Mode │ Destination │ Expiration │ Priority │ Redelivered │ ReplyTo │ Timestamp ────────────────────────────────────────────────┼───────────────┼─────────┼──────┼────────────────┼───────────────┼─────────────┼────────────┼──────────┼─────────────┼─────────┼────────────────────────────── ID:64842f99-5cb2-4850-9e88-f50506d49d20:1:1:1-1 │ Hello Artemis │ UTF-8 │ │ │ Persistent │ DEV.QUEUE.1 │ Never │ 4 │ false │ │ Mon May 14 12:47:13 CEST 2018
7.5.3. pax-jms-pool-narayana 接続プールモジュールの使用
pax-jms-pool-narayna
モジュールはほぼすべてが pax-jms-pool-pooledjms
として行われます。XA と XA 以外のシナリオ向けに、pooled-jms 固有の org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
をインストールします。唯一 の違いは XA シナリオでは、追加の統合ポイントがあることです。org.jboss.tm.XAResourceRecovery
OSGi サービスは、com.arjuna.ats.arjuna.recovery.RecoveryManager
によって取得されるように登録されます。
7.5.4. pax-jms-pool-transx 接続プールモジュールの使用
pax-jms-pool-transx
モジュールは、pax-transx-jms
バンドルに基づく org.ops4j.pax.jms.service.PooledConnectionFactoryFactory
サービスの実装を提供します。pax-transx-jms
バンドルは、org.ops4j.pax.transx.jms.ManagedConnectionFactoryBuilder
機能を使用して javax.jms.ConnectionFactory
プールを作成します。これは、「pax-transx プロジェクト」 で説明されている JCA(Java™ Connector Architecture) ソリューションです。