【发布时间】:2012-04-23 22:00:21
【问题描述】:
我正在实施涉及分布式资源的两阶段提交。如何模拟参与数据库的故障?拔网线不起作用,因为它会导致表死锁。我目前在我的应用程序代码中使用钩子,它们在查询执行之前和查询执行之后的不同点抛出StaleConnectionException。我对这种方法的担忧是:
- 有没有更好的方法来模拟数据库故障?
- 当数据库连接变坏时,连接对象会发生什么?它是保留其价值还是变为 null?
- 当应用程序尝试重新连接到 DB 时实际发生了什么?连接对象得到什么值?它是否使用连接池中的现有值?
我还想在中间点进行测试,例如在查询执行期间、提交期间(发送 prepare 之后等)。现在我将应用程序置于调试模式并进入函数调用并在两者之间插入插件。但这种方法是手动的,不适用于规模测试。
是否有模拟器/模拟器或工具可以帮助我做到这一点?
【问题讨论】:
-
您的目标是任何特定的数据库,还是需要为任何 JDBC 连接的数据库提供通用解决方案?
-
我现在正在使用 DB2 和 DB2 z/OS。
-
安迪,你选择了哪种模拟数据库故障的方法?
-
@dmiandre:这是某个时候回来的,所以 dnt 真的记得..但我认为我所做的一种方法是确保第二个数据库上的查询出现错误(不正确的表名或其他东西) ..因此,当第一个到达提交阶段时,第二个查询确实失败了。我的主要目标是使两阶段提交失败,所以这行得通!将尝试挖掘旧项目,看看是否可以找到任何其他使用的方法。
-
我一直在互联网上搜索以找到测试此类案例的最佳实践,但似乎没有人对其进行测试。我唯一找到的是来自 JBoss 的 Byteman。它是一种无需更改代码即可注入故障的工具。
标签: java database transactions websphere 2phase-commit