我有一个关于JMS的问题。它们从事件数据库中检索,并通过ActiveMQ broker发送到企业服务总线。
当发送JMS时,它们在事件数据库中被标记为已发送。这个过程应该是事务性的。
然而,我注意到某些JMS被标记为已发送,而它们却没有被接收到。我研究过这个问题,注意到分布式事务没有实现,这导致了JMS的丢失。它们在事件数据库中被标记为已发送,但是它们被发送到的ESB抛出了一个错误,并且没有接收到JMS。
此时,数据库事务应该已经回滚,但事实并非如此,因为这两个事务都没有被管理。
我实现了Atomikos事务协调器来处理这两个事务。现在我想测试一下我的新配置。
我听说有一种方法可以测试这两种事务处理,但我找不到示例。你有什么想法或例子吗?
技术: Spring集成、ActiveMQ、Atomikos
发布于 2017-02-20 22:20:30
请参阅Spring Documentation。同样的技术也适用。
访问实际数据库的测试中的一个常见问题是它们对持久性存储状态的影响。即使您使用的是开发数据库,状态的更改也可能会影响未来的测试。此外,许多 - 操作不能在事务之外执行(或验证),例如插入或修改持久数据 - 。
TestContext框架解决了这个问题。默认情况下,框架将为每个测试创建并回滚一个事务。您只需编写可以假定存在事务的代码。如果您在测试中调用事务性代理对象,它们将根据其配置的事务性语义正确运行。此外,如果测试方法在为测试管理的事务内运行时删除所选表的内容,则默认情况下,事务将回滚,数据库将返回到执行测试之前的状态。通过在测试的应用程序上下文中定义的PlatformTransactionManager bean为测试提供事务支持。
如果您希望事务提交提交,这是不寻常的,但有时在您希望特定测试填充或修改数据库提交时很有用,可以指示TestContext框架通过@ - 注解导致事务提交而不是回滚。
请参阅使用TestContext框架进行事务管理。
https://stackoverflow.com/questions/42339420
复制相似问题