SpringJMS测试和事务回滚
我有一个使用Spring的SpringJMS测试和事务回滚,spring,junit,jms,Spring,Junit,Jms,我有一个使用Spring的SpringJUnit4ClassRunner(在每个JUnit测试结束时自动回滚DB更新)的测试工具。现在我想测试我的基于Spring的JMS代码: 创建了一些数据库项 发送JMS消息以执行某些操作 MDP拾取消息并在DB中执行其他操作 测试中实际发生的情况如下: Spring在线程1上开始事务(tx1) DB项是在tx1上下文中创建的 发送JMS消息 事务tx1回滚,线程1退出 线程2启动MDP,开始事务tx2,读取消息,并执行DB工作 线程2提交tx2,因为其未被
SpringJUnit4ClassRunner
(在每个JUnit测试结束时自动回滚DB更新)的测试工具。现在我想测试我的基于Spring的JMS代码:
我想让tx1和tx2都由
SpringJUnit4ClassRunner
控制,所以我得到了自动回滚。如果他们能够共享相同的整体事务上下文,那就更好了;现在,如果tx1中保存了某些内容,即使线程1没有回滚该tx,tx2也看不到数据库的更改。您需要使用支持XA的事务管理器,从而能够在数据库和JMS引擎上执行两阶段提交。有几个这样的事务管理器(Bitronix、Atomikos等)可以免费使用
如果您已经使用了这样的事务管理器(因为您的应用程序在提供它的应用程序服务器中运行),但您不希望仅为单元测试配置如此繁重的内容,那么请实现两个单元测试
- 其中JMS部分是模拟的(仅用于测试DB项的创建)
- 其中只测试JMS消息处理