SessionAwareMessageListener是否需要commit()/ rollback()?

时间:2014-10-06 10:52:31

标签: spring jms

我们正在使用Spring的SessionAwareMessageListener。您似乎需要手动commit()rollback()以确保邮件已被使用或标记为要重新传递。但是我想知道你是否也可以把它留下来,然后期望SessionAwareMessageListener在没有异常的情况下自动提交,或者如果发生异常则回滚。

1 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但这是我的答案:

不,SessionAwareMessageListener没有"要求"一个commit()rollback()本身。您可以在没有这些调用的情况下在侦听器中使用代码,并且侦听器仍然会使用消息并假设所有消息都没有问题,除非从onMessage()方法抛出异常。

对于commit()rollback()调用来执行他们打算执行的操作,您必须使用事务处理会话。这可以通过在sessionTransacted上将true标记设置为DefaultMessageListenerContainer,或者通过定义并将您自己的事务管理器附加到容器来完成。