使用sessionTransacted = true(在JmsTemplate和/或DefaultMessageListenerContainer中)和使用JmsTransactionManager之间的主要区别是什么?对于JmsTemplate和DefaultMessageListenerContainer用法,是否使用sessionTransacted = true? (我不需要XA)
该文件说(setSessionTransacted中的JmsAccessor方法),似乎不应该是一个问题:
将此标志设置为“true”将使用短的本地JMS事务 在托管事务之外运行时,同步 在托管交易的情况下的本地JMS交易(除了 XA交易)在场。
答案 0 :(得分:3)
正确。
在DMLC
上,您通常只需要acknowledgemode=transacted
;如果需要将JMS事务与JDBC事务同步或者需要使用平台(JTA)事务管理器,则只能在DMLC上使用事务管理器。
此外,容器线程上的任何下游JmsTemplate
操作都将在同一会话中完成并参与交易。
同样,对于不是容器线程的线程上的JmsTemplate
操作,除非平台需要,否则您通常不需要事务管理器。
答案 1 :(得分:1)