2017-02-20 144 views
0

我有一个关于JMS的问题。它们从事件数据库中检索并通过ActiveMQ代理发送到ESB。Atomikos交易测试jms

当JMS发送时,它们被标记为在事件数据库中发送。这个过程应该是事务性的。

但是,我注意到,索姆JMS被标记为发送时,他们没有收到。 我研究过这个问题,并注意到分布式事务没有实现,导致JMS的丢失。它们被标记为发送到事件数据库中,但发送给它们的ESB发生错误,并且未收到JMS。

在这一点上数据库事务应该已经回滚,但它不是两个事务都没有管理。

我实现了Atomikos事务协调器来处理这两个事务。现在我想测试我的新配置。

我听说有一种方法来测试两个事务处理,但我没有找到任何示例。你有什么想法或例子吗?

技术:Spring集成,ActiveMQ的,Atomikos公司

回答

0

Spring Documentation。相同的技术也适用。

访问真实数据库的测试中的一个常见问题是它们对持久性存储的状态的影响。即使在使用开发数据库时,对状态的更改也可能影响未来的测试。此外,许多操作(例如插入或修改持久数据)不能在事务外执行(或验证)。

TestContext框架解决了这个问题。默认情况下,框架将为每个测试创建并回滚事务。您只需编写可以假定交易存在的代码。如果您在测试中调用事务代理对象,则它们将根据其配置的事务语义正确行为。另外,如果测试方法在为测试管理的事务内运行时删除所选表的内容,那么事务将默认回滚,并且数据库将在执行测试之前返回到其状态。事务支持通过在测试的应用程序上下文中定义的PlatformTransactionManager bean提供给测试。

如果你想要一个事务提交 - 不寻常的,但当你想要一个特定的测试来填充或修改数据库时偶尔有用 - 可以指示TestContext框架使事务提交而不是通过@Commit回滚注解。

使用TestContext框架查看事务管理。