【发布时间】:2011-10-06 22:46:27
【问题描述】:
我有一个使用 Spring 的 SpringJUnit4ClassRunner 的测试工具(它会在每个 JUnit 测试结束时自动回滚数据库更新)。现在我想测试我的基于 Spring 的 JMS 代码:
- 创建了一些数据库项
- 发送 JMS 消息以执行某项操作
- MDP 获取消息并在 DB 中执行其他操作
测试中实际发生的情况如下:
- Spring 在线程 1 上开始事务 (tx1)
- 数据库项目是在 tx1 上下文中创建的
- JMS 消息已发送
- 事务 tx1 回滚,线程 1 退出
- 线程 2 启动 MDP,开始事务 tx2,读取消息,然后 DB 工作
- 线程 2 提交 tx2,因为它没有被测试工具启动,然后退出
我想要发生的是 tx1 和 tx2 都由SpringJUnit4ClassRunner 控制,所以我得到了自动回滚。如果他们可以共享相同的整体事务上下文,那就更好了。现在,如果 tx1 中保存了某些内容,即使线程 1 没有回滚该 tx,tx2 也不会看到 DB 更改。
【问题讨论】: