第4章 Narayana トランザクションマネージャーの設定

Fuse では、ビルトインのグローバルトランザクションマネージャーは JBoss Narayana Transaction Manager で、Enterprise Application Platform(EAP)7 によって使用されるトランザクションマネージャーと同じです。

Karaf の Fuse と同様に、OSGi ランタイムでは追加のインテグレーションレイヤーは PAX TRANSX プロジェクトによって提供されます。

以下のトピックでは、Narayana の設定について説明します。

4.1. Narayana のインストール

Narayana トランザクションマネージャーは、以下のインターフェイス、およびいくつかの追加のサポートインターフェイスの下で OSGi バンドルで使用できるように公開されています。

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

7.8.0.fuse-780038-redhat-00001 ディストリビューションでは、これらのインターフェイスを最初から利用できるようになります。

pax-transx-tm-narayana 機能には、Narayana を組み込むオーバーライドされたバンドルが含まれます。

karaf@root()> feature:info pax-transx-tm-narayana
Feature pax-transx-tm-narayana 0.3.0
Feature has no configuration
Feature has no configuration files
Feature depends on:
  pax-transx-tm-api 0.0.0
Feature contains followed bundles:
  mvn:org.jboss.fuse.modules/fuse-pax-transx-tm-narayana/7.0.0.fuse-000191-redhat-1 (overriden from mvn:org.ops4j.pax.transx/pax-transx-tm-narayana/0.3.0)
Feature has no conditionals.

fuse-pax-transx-tm-narayana バンドルが提供するサービスは以下のとおりです。

karaf@root()> bundle:services fuse-pax-transx-tm-narayana

Red Hat Fuse :: Fuse Modules :: Transaction (21) provides:
----------------------------------------------------------
[org.osgi.service.cm.ManagedService]
[javax.transaction.TransactionManager]
[javax.transaction.TransactionSynchronizationRegistry]
[javax.transaction.UserTransaction]
[org.jboss.narayana.osgi.jta.ObjStoreBrowserService]
[org.ops4j.pax.transx.tm.TransactionManager]
[org.springframework.transaction.PlatformTransactionManager]

このバンドルは org.osgi.service.cm.ManagedService を登録するため、CM 設定の変更を追跡し、これに反応します。

karaf@root()> bundle:services -p fuse-pax-transx-tm-narayana

Red Hat Fuse :: Fuse Modules :: Transaction (21) provides:
----------------------------------------------------------
objectClass = [org.osgi.service.cm.ManagedService]
service.bundleid = 21
service.id = 232
service.pid = org.ops4j.pax.transx.tm.narayana
service.scope = singleton
...

デフォルトの org.ops4j.pax.transx.tm.narayana PID は以下のようになります。

karaf@root()> config:list '(service.pid=org.ops4j.pax.transx.tm.narayana)'
----------------------------------------------------------------
Pid:            org.ops4j.pax.transx.tm.narayana
BundleLocation: ?
Properties:
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.communicationStore.localOSRoot = communicationStore
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.communicationStore.objectStoreDir = /data/servers/7.8.0.fuse-780038-redhat-00001/data/narayana
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.communicationStore.objectStoreType = com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.localOSRoot = defaultStore
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.objectStoreDir = /data/servers/7.8.0.fuse-780038-redhat-00001/data/narayana
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.objectStoreType = com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.stateStore.localOSRoot = stateStore
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.stateStore.objectStoreDir = /data/servers/7.8.0.fuse-780038-redhat-00001/data/narayana
   com.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.stateStore.objectStoreType = com.arjuna.ats.internal.arjuna.objectstore.ShadowNoFileLockStore
   com.arjuna.ats.arjuna.common.RecoveryEnvironmentBean.recoveryBackoffPeriod = 10
   felix.fileinstall.filename = file:/data/servers/7.8.0.fuse-780038-redhat-00001/etc/org.ops4j.pax.transx.tm.narayana.cfg
   service.pid = org.ops4j.pax.transx.tm.narayana

つまり、以下のようになります。

  • Karaf の Fuse には、フル機能のグローバル、Narayana トランザクションマネージャーが含まれます。
  • トランザクションマネージャーは、さまざまなクライアントインターフェイス (JTA、Spring-tx、PAX JMS) で正しく公開されます。
  • Narayana は、org.ops4j.pax.transx.tm.narayana で利用可能な標準の OSGi メソッドである Configuration Admin を使用して設定できます。
  • デフォルト設定は $FUSE_HOME/etc/org.ops4j.pax.transx.tm.narayana.cfg で提供されます。