11.7.3. 在交易中处理 Heuristic Outcome
启发式事务结果不常见,通常具有特殊的原因。神秘一词意味着"手动",这就是通常必须处理这些结果的方式。有关启发式事务结果的更多信息,请参阅关于 Heuristic Outcomes。
此流程演示了如何使用 Jakarta Transactions 处理交易的启发式结果。
事务中的启发式成果的原因是资源经理承诺可以提交或回滚,然后无法履行承诺。这可能是因为第三方组件、第三方组件和 JBoss EAP 之间的集成层或 JBoss EAP 本身存在问题。
目前,导致启发式错误的最常见两个原因是环境中的瞬态故障,以及处理资源管理器的编码错误。
通常,如果您的环境中出现瞬态故障,您通常会在发现启发性错误前了解它。这可能是因为网络中断、硬件故障、数据库故障、电源中断或许多其他因素造成的。
如果在压力测试期间测试环境中发现了启发性的结果,这意味着您的测试环境存在缺点。
警告JBoss EAP 自动恢复出现故障时处于非修复状态的交易,但不试图恢复启发式交易。
如果您的环境中没有明显失败,或者启发式结果很容易再现,这可能是因为编码错误。您必须联系第三方供应商,以确定解决方案是否可用。
如果您怀疑问题在 JBoss EAP 本身的交易经理中,您必须提交支持票据。
- 您可以使用管理 CLI 尝试手动恢复事务。如需更多信息,请参阅在 JBoss EAP 上管理交易的 恢复事务 参与者 一节。
手动解决事务结果的过程取决于故障的确切情况。根据您的环境执行以下步骤:
- 确定涉及哪些资源管理器。
- 检查事务管理器和资源管理器的状态。
- 在一个或多个涉及的组件中手动强制进行日志清理和数据协调。
在测试环境中,或者如果您不关注数据的完整性,请删除事务日志并重新启动 JBoss EAP 将会去除启发式结果。默认情况下,事务日志位于单机服务器的
EAP_HOME/standalone/data/tx-object-store/目录中,或者位于受管域中的EAP_HOME/domain/servers/SERVER_NAME/data/tx-object-store/目录中。对于受管域,SERVE R_NAME 是指参与服务器组的单个服务器的名称。注意事务日志的位置还取决于使用的对象存储,以及为 object-store-
relative-to 和参数设置的值。对于文件系统日志,如标准 shadow 和 Apache ActiveMQ Artemis 日志,将使用默认的目录位置,但在使用 JDBC 对象存储时,事务日志存储在数据库中。object-store-path