sessionTransacted和JmsTransactionManager之间的区别

时间:2014-05-23 18:47:56

标签: java spring jms spring-jms

使用sessionTransacted = true(在JmsTemplate和/或DefaultMessageListenerContainer中)和使用JmsTransactionManager之间的主要区别是什么?对于JmsTemplate和DefaultMessageListenerContainer用法,是否使用sessionTransacted = true? (我不需要XA)

该文件说(setSessionTransacted中的JmsAccessor方法),似乎不应该是一个问题:

  

将此标志设置为“true”将使用短的本地JMS事务   在托管事务之外运行时,同步   在托管交易的情况下的本地JMS交易(除了   XA交易)在场。

2 个答案:

答案 0 :(得分:3)

正确。

DMLC上,您通常只需要acknowledgemode=transacted;如果需要将JMS事务与JDBC事务同步或者需要使用平台(JTA)事务管理器,则只能在DMLC上使用事务管理器。

此外,容器线程上的任何下游JmsTemplate操作都将在同一会话中完成并参与交易。

同样,对于不是容器线程的线程上的JmsTemplate操作,除非平台需要,否则您通常不需要事务管理器。

答案 1 :(得分:1)

会话transactioned是指会话开始时的事务开始,会话结束时的事务结束。如果你需要更多的事务控制,你需要JmsTransactionManager(本地)