【问题标题】:Atomikos transaction test jmsAtomikos 事务测试 jms
【发布时间】:2017-02-20 08:11:26
【问题描述】:

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

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

但是,我注意到 som JMS 被标记为已发送而未收到。 我研究了这个问题,发现分布式事务没有实现,导致 JMS 丢失。它们在事件数据库中被标记为已发送,但它们被发送到的 ESB 引发错误并且未收到 JMS。

此时数据库事务应该已经回滚,但不是因为两个事务都没有被管理。

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

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

技术:Spring 集成、ActiveMQ、Atomikos

【问题讨论】:

    标签: transactions jms spring-integration atomikos


    【解决方案1】:

    请参阅Spring Documentation。同样的技术也适用。

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

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

    如果您希望事务提交 — 不寻常,但在您希望特定测试填充或修改数据库时偶尔有用 — 可以指示 TestContext 框架使事务提交而不是通过 @Commit 注释回滚.

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

    【讨论】:

      猜你喜欢
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      • 2012-06-18
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多