如果XADataSource (Oracle )的连接完全需要一个Java引用才能保持活动,下面的问题是理解为什么存在一个持续了6个小时的连接会话,并且持有一个锁并中断线程。
对于被设置为保持到显式结束的分布式事务(备-xa- connection complete=true),我想知道一旦GC回收连接,驱动程序如何决定是否关闭连接并提交事务。数据库管理系统是否有办法做到这一点?
因此,问题在于DBMS如何决定是否放弃分布式事务。
发布于 2014-12-11 00:23:13
DBMS不决定结束事务,事务管理器则决定结束事务。
事务管理器被设置为在应用程序容器中运行,无论它们是Spring、J2EE应用服务器还是其他什么。它们必须通过正确配置来“知道”它们是分布式事务管理器。在分布式事务环境中,有多个事务应用程序和/或服务交互来完成事务,它们都必须能够支持分布式事务以正确使用XADataSources,并在链上和链上发送正确的信号,以便提交和回滚。
假设您有上述情况、参与分布式事务的多个应用程序和/或服务,听起来似乎其中一个没有正确配置。链中的某些东西并不是真正的分布式事务,因此当它完成时,它只是在本地完成,而不是将信号发送回直线。因此,分布式事务永远不会完成,保持连接处于打开状态。
检查参与事务的每个应用程序和/或服务的配置。在每个事务上添加日志输出,详细说明事务是否是分布式事务。如果您不能这样做,那么dd记录输出到每一个记录事务的开始和结束。查找操作序列中的最新点,在其中您可以看到一个开放事务,而不是一个关闭事务。如果您看到这一点,很可能是链中的节点后面的节点正在做一些错误的事情。
祝好运。
https://stackoverflow.com/questions/27235719
复制相似问题