11.4. transaction Outcomes
11.4.1. 关于交易结果 复制链接链接已复制到粘贴板!
事务有三种可能的结果:
- Commit(提交)
- 如果每个交易参与者都可提交,交易协调员将指示他们这样做。如需更多信息 ,请参阅 关于交易提交。
- 回滚(Rollback)
- 如果任何交易参与者无法提交,或者交易协调员无法指示参与者提交,交易将被回滚。如需更多信息 ,请参阅关于交易回滚。
- 启发式结果
- 如果一些事务参与者提交和其他回滚,则称为启发式结果。启发性成果需要人为干预。如需更多信息 ,请参阅关于 Heuristic Outcomes。
11.4.2. 关于交易提交 复制链接链接已复制到粘贴板!
交易参与者提交时,将其新状态变为持久状态。新状态由参与者承担交易涉及的工作创建。最常见的示例是事务成员向数据库写入记录。
提交后,交易信息将从交易协调员中删除,新编写的状态现在是持久状态。
11.4.3. 关于交易回滚 复制链接链接已复制到粘贴板!
交易参与者回滚,恢复其状态以在交易开始前反映状态。回滚后,其状态与事务从未启动的情况相同。
11.4.4. 关于 Heuristic Outcomes 复制链接链接已复制到粘贴板!
启发性结果或非混合性的结果是交易参与者的决定不同于交易经理的决定的情况。启发性结果可能会导致系统完整性丢失,通常需要人工干预来解决它们。不要编写依赖于它们的代码。
启发式结果通常在 2 阶段提交(2PC)协议的第二阶段发生。在个别情况下,可能会在 1PC 中产生这个结果。它们通常由底层服务器基础硬件或通信子系统失败所致。
启发式结果可能源自各种子系统或资源的超时结果,即使事务管理器和完整崩溃恢复也是如此。在需要某种形式的分布式协议的任何系统中,系统的某些部分在全局结果上存在差异的情况。
启发式结果有四种:
Heuristic rollback
提交操作无法提交资源,但所有参与者都可以回滚,因此依然能实现原子性成果。
Heuristic commit
尝试回滚操作失败,因为所有参与者都已完成。例如,如果协调员能够成功准备交易,但随后决定回滚(例如,未能更新其日志),则会出现这种情况。此时,参与者可能决定提交。
Heuristic mix
某些参与者已提交,另一些已回滚。
启发式政府.
些更新的内容未知。对于已知的对象,它们或者全部已提交,或者全部已回滚。
11.4.5. JBoss 事务错误和例外 复制链接链接已复制到粘贴板!
有关 UserTransaction 类方法引发异常的详情,请查看 UserTransaction API Javadoc。