2.3. camel-jms 项目的解释
Camel 路由使用以下端点 URI:
<route id="file-to-jms-route">
...
<to uri="jms:queue:incomingOrders?transacted=true" />
</route>
<route id="jms-cbr-route">
<from uri="jms:queue:incomingOrders?transacted=true" />
...
</route>
jms 组件使用此片断进行配置:
<bean id="jms" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory">
<reference interface="javax.jms.ConnectionFactory" />
</property>
<property name="transactionManager" ref="transactionManager"/>
</bean>
在 transactionManager 引用时:
<reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
正如您所见,JMS 连接工厂和 PlatformTransactionManager 的 Spring 接口仅引用。不需要在蓝图 XML 中定义 它们。这些服务 由 Fuse 本身公开。
您已看到 javax.jms.ConnectionFactory 是使用 etc/org.ops4j.connectionfactory-amq7.cfg 创建的。
事务管理器是:
karaf@root()> service:list org.springframework.transaction.PlatformTransactionManager
[org.springframework.transaction.PlatformTransactionManager]
------------------------------------------------------------
service.bundleid = 21
service.id = 527
service.scope = singleton
Provided by :
Red Hat Fuse :: Fuse Modules :: Transaction (21)
Used by:
Red Hat Fuse :: Quickstarts :: camel-jms (256)
检查注册实际事务管理器的其他接口:
karaf@root()> headers 21
Red Hat Fuse :: Fuse Modules :: Transaction (21)
------------------------------------------------
...
Bundle-Name = Red Hat Fuse :: Fuse Modules :: Transaction
Bundle-SymbolicName = fuse-pax-transx-tm-narayana
Bundle-Vendor = Red Hat
...
karaf@root()> bundle:services -p 21
Red Hat Fuse :: Fuse Modules :: Transaction (21) provides:
----------------------------------------------------------
objectClass = [org.osgi.service.cm.ManagedService]
service.bundleid = 21
service.id = 519
service.pid = org.ops4j.pax.transx.tm.narayana
service.scope = singleton
----
objectClass = [javax.transaction.TransactionManager]
provider = narayana
service.bundleid = 21
service.id = 520
service.scope = singleton
----
objectClass = [javax.transaction.TransactionSynchronizationRegistry]
provider = narayana
service.bundleid = 21
service.id = 523
service.scope = singleton
----
objectClass = [javax.transaction.UserTransaction]
provider = narayana
service.bundleid = 21
service.id = 524
service.scope = singleton
----
objectClass = [org.jboss.narayana.osgi.jta.ObjStoreBrowserService]
provider = narayana
service.bundleid = 21
service.id = 525
service.scope = singleton
----
objectClass = [org.ops4j.pax.transx.tm.TransactionManager]
provider = narayana
service.bundleid = 21
service.id = 526
service.scope = singleton
----
objectClass = [org.springframework.transaction.PlatformTransactionManager]
service.bundleid = 21
service.id = 527
service.scope = singleton
事务管理器可从这些接口获得:
-
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
您可以在您需要的任何上下文中使用它们。例如,camel-jms 需要初始化 org.apache.camel.component.jms.JmsConfiguration.transactionManager 字段。这就是示例使用的原因:
<reference id="transactionManager" interface="org.springframework.transaction.PlatformTransactionManager" />
例如:
<reference id="transactionManager" interface="javax.transaction.TransactionManager" />