【问题标题】:Cannot call Connection.commit in distributed transaction无法在分布式事务中调用 Connection.commit
【发布时间】:2017-03-13 09:27:45
【问题描述】:

我正在使用 Weblogic 12c,在我的应用程序中提交分布式事务时出现以下错误。

"java.sql.SQLException: 分布式事务中无法调用Connection.commit。分布式事务提交时事务管理器会提交资源管理器"

代码抛出异常的部分是:

Session sessionNew = HibernateService.getService().getSession();
sessionNew.connection().commit(); 

这个问题已经被问过好几次了,但我正在寻求的解决方案是不同的。 最常见的解决方案是禁用 XA 事务来解决问题。 但我的应用程序包含的不仅仅是数据库、JMS 等资源。 任何人都可以提出上述解决方案以外的解决方案。

另外,我需要了解 JTA 事务超时值与上述错误之间是否有任何关系。

非常感谢。

【问题讨论】:

  • 如果您真的需要 XA 事务,您必须让事务管理器提交或回滚事务。您的代码不应显式调用提交或回滚。
  • @EmmanuelCollin,谢谢。如果我删除第二行,它应该不会影响应用程序吗?上面的错误和JTA事务超时值有什么关系吗?
  • 错误信息和JTA超时没有关系。

标签: java weblogic weblogic12c jta xa


【解决方案1】:

如果您将@TransactionManagement (TransactionManagementType.CONTAINER) 切换为@TransactionManagement (TransactionManagementType.BEAN),则很可能不会再发生此错误。

因此,您在提交时定义您定义的内容,而不是服务器。

【讨论】:

    猜你喜欢
    • 2011-11-20
    • 2015-07-02
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多