如果我们希望 JMS 会话参与事务,我们创建一个会话参数为 true 的 JMS 会话。
但是,我在哪里提到了 JMS,它参与事务的会话是本地事务还是全局事务?
换句话说,我是否可以控制让 JMS 参与本地或全局事务,还是由应用程序容器来决定?
如果我们希望 JMS 会话参与事务,我们创建一个会话参数为 true 的 JMS 会话。
但是,我在哪里提到了 JMS,它参与事务的会话是本地事务还是全局事务?
换句话说,我是否可以控制让 JMS 参与本地或全局事务,还是由应用程序容器来决定?
这取决于您使用的连接工厂。
JMS 规范指定了两种不同类型的连接工厂,每种类型包含三个接口。
XAConnectionFactory、XAQueueConnectionFactory 和 XATopicConnectionFactory
对于 XA 连接工厂和
ConnectionFactory、QueueConnectionFactory 和 TopicConnectionFactory
对于非 XA 连接工厂。如果您使用 XA* *,那么您的 JMS 会话将参与全局事务。当然,这部分是从您的代码中抽象出来的,因为通常通过提供者特定的接口配置连接工厂,然后通过 JNDI 查找它们。
这是一个讨论 WebLogic 中 JMS 的全局事务的链接。