【问题标题】:The End of XA-Transaction, Garbage Collection and till-tx-complete =trueXA-Transaction、垃圾收集和 till-tx-complete =true 的结束
【发布时间】:2014-12-01 19:28:06
【问题描述】:

如果 XADataSource(Oracle 驱动程序)的连接完全需要 Java 引用,则存在以下问题:理解为什么存在持续 6 小时的连接会话并持有锁并中断线程保持活力。

在分布式事务设置为保留直到显式结束(keep-xa-conn-till-tx-complete=true)方面,我想知道一旦 GC 回收,驱动程序如何决定是否关闭连接并提交事务连接。 DBMS 有没有办法做到这一点?

所以问题是 DBMS 如何决定是否放弃分布式事务。

【问题讨论】:

  • 如果您想从 Oracle 的侧面查看它,请查看 dba_2pc_pending 和 v$transtaction。如果您需要帮助,请详细描述您的情况。分布式事务没有什么简单的事情。

标签: java oracle transactions garbage-collection


【解决方案1】:

DBMS 不决定结束事务,事务管理器决定。

事务管理器设置为在您的应用程序容器中运行,无论它们是 Spring、J2EE 应用程序服务器还是其他东西。他们必须通过正确配置“知道”他们是分布式事务管理器。在分布式事务环境中,您有多个事务应用程序和/或服务交互以完成事务,它们都必须能够支持分布式事务以正确使用 XADataSource 并在链上上下发送正确的信号以进行提交与回滚。

假设您有上述情况,多个应用程序和/或服务参与分布式事务,听起来好像其中一个配置不正确。链中的某些东西并不是真正的分布式事务,因此当它完成时,它只是在本地完成,而不是将信号发送回线路。所以分布式事务永远不会完成,保持连接打开。

检查参与事务的每个应用程序和/或服务的配置。在每个事务上添加日志输出,详细说明事务是否是分布式事务。如果你不能这样做,那么 dd 日志输出到每个记录事务的开始和结束。在操作序列中找到您看到未完成交易但没有关闭交易的最新点。如果您看到这一点,则很可能是链中紧随其后的节点出现问题。

祝你好运。

【讨论】:

  • XA 连接超时设置为 10 小时。我想这就是使问题成为可能的原因。
猜你喜欢
  • 1970-01-01
  • 2012-03-21
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多