【问题标题】:committing multiple connections during a transaction在事务期间提交多个连接
【发布时间】:2010-07-26 10:28:56
【问题描述】:

如果连接取自 weblogic 中的数据源,我可以在一个事务期间创建多个连接并对其执行提交。 ???请帮忙

【问题讨论】:

    标签: java connection weblogic


    【解决方案1】:

    你的意思是来自不同的数据源?

    当然可以。这就是 JTA 的用途。

    只需确保相关数据源的驱动程序支持 XA。​​


    已编辑 我明白你的意思了。

    我开发的应用程序有这样的功能。假设您的请求处理例程有一些基本的流控制或处理程序结构,您总是可以为错误处理部分启动一个新事务,提交该新事务,然后回滚原始事务。

    使用 Spring + 声明式事务控制,您需要围绕错误处理例程声明一个事务,并使用 REQUIRES_NEW 传播策略

    【讨论】:

    • 嗨,阿德里安...如果我的数据源不是 XA 感知的...那么会有任何问题。
    • 嗯,是的......除非您有其他方法可以跨“登记”数据源执行两阶段提交以进行事务。
    • 我的意思是..假设我使用休眠和数据源作为连接提供者..但在一种情况下,我需要回滚完整的执行..但想插入一个表与时间..还有一些细节......我想使用来自数据源的连接并使用简单的过程使用 PreparedStatement 插入表中......关于连接会有任何问题..
    • 你的意思是在回滚之前记录失败的自治事务吗?
    • @Mrityunjay:我看不出你的情况和在同一个事务中有多个插入/更新/删除的一些非常正常的情况有什么区别
    【解决方案2】:

    根据您想要有效地记录失败的自治事务的注释,您可以使用数据源中的第二个连接并提交该连接,同时回滚原始失败的连接(不需要 XA;您问题中的措辞表明您希望同时提交两个连接);或者,如果您可以在回滚之前使用实际的autonomous transaction 来处理原始连接内的日志记录。这可能更简单、更清晰,特别是如果您的故障确实来自包调用,因为它可以在故障发生时处理,而不是让客户担心。概述:

    PROCEDURE log_failure(...)
    IS
        PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
        insert ...
        commit;
    END log_failure;
    

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多