我有一个测试工具使用Spring的SpringJUnit4ClassRunner
(在每个JUnit测试结束时自动回滚数据库更新)。现在我想测试我的基于Spring的JMS代码:
测试中实际发生的情况如下:
我想要发生的是tx1和tx2都由SpringJUnit4ClassRunner
控制,所以我得到自动回滚。如果他们可以共享相同的整体交易背景,那就更好了;现在,如果在tx1中保存了某些内容,即使线程1没有回滚该tx,tx2也不会看到数据库发生变化。
答案 0 :(得分:2)
您需要使用支持XA的事务管理器,因此能够对数据库和JMS引擎进行两阶段提交。有几个这样的交易经理(Bitronix,Atomikos等)可以免费获得。
如果您已经使用过这样的事务管理器(因为您的应用程序在提供它的应用程序服务器中运行),但您不想为单元测试配置那么重的东西,那么实现两个单元测试
请注意,如果没有XA,您可能必须处理奇怪的情况,即处理JMS消息而第一个事务尚未提交,或者数据库事务已被调用,但发送消息失败。