我有一个关于JMS的问题。它们从事件数据库中检索并通过ActiveMQ代理发送到ESB。
发送JMS时,它们被标记为在事件数据库中发送。这个过程应该是交易性的。
但是,我注意到som JMS在未收到时标记为已发送。 我研究过这个问题并注意到分布式事务没有实现导致JMS丢失。它们被标记为在事件数据库中发送,但它们被发送到的ESB引发了错误并且未收到JMS。
此时数据库事务应该已经回滚,但并不是因为两个事务都没有被管理。
我实施了Atomikos事务协调器来处理这两个事务。现在我想测试我的新配置。
我听说有一种方法可以测试两种交易处理,但我没有找到任何例子。你有什么想法或例子吗?
技术:Spring Integration,ActiveMQ,Atomikos
答案 0 :(得分:0)
请参阅Spring Documentation。适用相同的技术。
访问真实数据库的测试中的一个常见问题是它们对持久性存储的状态的影响。即使您使用的是开发数据库,对状态的更改也可能会影响将来的测试。此外,许多操作(例如插入或修改持久数据)无法在事务外执行(或验证)。
TestContext框架解决了这个问题。默认情况下,框架将为每个测试创建并回滚事务。您只需编写可以假定存在事务的代码。如果在测试中调用事务代理对象,则根据其配置的事务语义,它们将正常运行。此外,如果测试方法在为测试管理的事务中运行时删除所选表的内容,则事务将默认回滚,并且数据库将返回到执行测试之前的状态。通过在测试的应用程序上下文中定义的PlatformTransactionManager bean为测试提供事务支持。
如果您希望事务提交 - 异常,但偶尔需要特定测试来填充或修改数据库 - 可以指示TestContext框架使事务提交而不是通过@Commit注释回滚
使用TestContext框架查看事务管理。