根据官方文档(http://static.springsource.org/spring/docs/2.5.x/reference/jms.html中19.4.5一节)的说明,配置异步消息接收(即,监听消息) 的事务很简单:
<bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destination" ref="destination"/>
<property name="messageListener" ref="messageListener"/>
<property name="sessionTransacted" value="true"/>
</bean>
其中,messageListener bean 是java.jms.MessageListener接口的实现,其中包含了方法onMessage()用以处理接收到的消息
相关说明:
1、这里事务指的是:如果onMessage方法失败,该消息将回滚到JMS服务器中。回滚也包含那些已经向JMS服务器发送的任何response
但对其它本地资源的操作将无法改变。所以,如果已经正确处理完消息,但是onMessage()却因其它原因失败,那么可能会造成对该消息重复
的处理。
2、在onMessage()方法上设置了 事务后,由于存在“消息预取”的机制,所以该session将预取的消息全部处理完,
如果没有设置消息的超时时间的话。所以,在没有超时的情况下,又有事务的onMessage()方法中,最好不要让onMessage长期阻塞,
或者等待时间太长。。