首先介绍一篇文章:http://www.javaworld.com/javaworld/jw-01-2009/jw-01-spring-transactions.html?page=1
不过有点长,我现在都差不都忘了里面讲的内容了。注意评论,里面提到文章讲的内容有些是错误的。
Spring里,如果同时存在JMS操作和DB操作,大概也就三种方式:
1.没有使用JTA。JMS不在事务中,DB操作在事务中
a,消息处理
b,开始数据库事务
c,数据库操作
d,数据库提交
成功:结束
失败:回到b重试
这种方式事务没有集成,靠的纯粹是我们程序的控制,如果最终数据库提交都没成功的话,可以记下log,再人工去纠正数据。例子里把数据库操作放在了更重要的位置,其实也可以倒过来,让数据库操作先完成,只好在做jms操作,看业务需求了:
a,开始数据库事务
b,数据库操作
c,数据库提交
d,消息处理
成功:结束
失败:回到d重试
我们只要把spring配置改成
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
...
<!-- This