JTA:如何测试JMS和JDBC故障?

发布于 2024-08-14 06:52:36 字数 276 浏览 9 评论 0原文

我们目前正致力于在使用 JMS 接收消息、保留消息并使用另一个类发送结果的系统上测试 JTA 故障行为。

整个事情是使用 Spring 连接在一起的。当前的单元测试使用 HSQLDB、Apache ActiveMQ 和 Bitronix 进行事务管理。这方面的成功有限,主要是因为 HSQLDB 没有实现 XA 事务。

那么问题来了:如何在事务单元测试中最好地模拟数据库故障?有没有办法让标准 JDBC 驱动程序(比如 Oracle)在测试过程中失败?

注意按下电源按钮不是可重复的测试:)

we're currently working on testing JTA failure behaviour, on a system that receives messages using JMS, persists them, and sends results using another class.

The whole thing is tied together using Spring. Current unit tests use HSQLDB, Apache ActiveMQ and Bitronix for transaction management. Success with this has been limited, mostly because HSQLDB does not implement XA transactions.

So here is the question: how to best simulate database failures in a transaction unit test? Is there any way to make a standard JDBC driver (for Oracle, say) fail in the middle of a test?

n.b. pressing the power button is not a repeatable test :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

指尖上的星空 2024-08-21 06:52:36

您需要决定到底要测试什么 - 例如,如果您想测试 Oracle 在与 Bitronix 的 XA 事务中的行为方式,那么按照 duffymo 的建议,模拟 DAO 不会对您有帮助。在这种情况下,您需要找到一种方法在事务中间中断连接,然后查看 Bitronix/Oracle 将如何处理恢复 - 例如启发式结果等。

请注意,在很多情况下,有多种方法可以在不实际使用 XA 事务的情况下获得相同的功能。它可以更简单、更快、更易于测试。例如,在非常常见的情况下,当从数据库中执行的 MOM 和 DML 消耗消息时,即使两个资源管理器正在更新,也存在一种如何在没有 XA 的情况下摆脱困境的常见模式。

You need to decide what exactly do you want to test - for example if you want to test how Oracle would behave in XA transaction with Bitronix then mocking DAOs, as suggested by duffymo, is not going to help you. In such case you need to find a way to break connectivity in the middle of transaction and then see how Bitronix/Oracle would handle recovery - e.g. heuristic outcomes and so on.

Note that in quite a few cases there are ways to get the same functionality without actually using XA transactions. It could be simpler, faster and more testable. For example, in very common case when messages are consumed from MOM and DML executed in database there is a common pattern of how to get away without XA even so two resource managers are getting updated.

薄荷→糖丶微凉 2024-08-21 06:52:36

为测试编写一个模拟对象,其实现在事务中间抛出异常。

由于您使用的是 Spring,因此编写一个新的、仅用于测试的 DAO 接口实现是一件很容易的事情,该实现以可重复、可预测的方式运行。仅为测试注入“wonky DAO”。

当然,您正在使用 XA 驱动程序连接到数据库。否则两阶段提交将无法工作。

Write a mock object for the test whose implementation throws an exception in the middle of the transaction.

Since you're using Spring, it's an easy matter to write a new, test-only implementation of the DAO interface that behaves in a repeatable, predictable manner. Inject the 'wonky DAO' only for the test.

Of course you're using the XA driver to connect to the database. Two phase commit won't work otherwise.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文