代码之家  ›  专栏  ›  技术社区  ›  Garis M Suero

在清除LocalTransactionContainment时回滚了资源数据源

  •  4
  • Garis M Suero  · 技术社区  · 15 年前

    当使用ejb时,我总是收到这个错误。

    [7/1/10 17:12:28:770机器人]00000013 LocalTranCoor W WLTC0033W:资源 jdbc/oraDS11在清理 LocalTransactionContainment。 [7/1/10 17:12:28:773[机器人]00000013 LocalTranCoor W WLTC0032W:一个或多个 在清理过程中回滚

    javax.sql.DataSource ds = (javax.sql.DataSource) naming.lookup("DataSource");
    conn= ds.getConnection();
    

    任何帮助都将不胜感激。。。

    2 回复  |  直到 15 年前
        1
  •  6
  •   Pascal Thivent    15 年前

    从错误消息中,您正在本地事务内部执行一些工作,并且 没有承诺 . 未提交的工作由方法末尾的容器回滚(默认情况下)。

    这个答案 Datasource rollback in WAS6.0 很好地总结了这一切,因为没有真正意义上的解释,我下面引用它。

    A LocalTransactionContainment 是什么 在没有全球合作的情况下 (XA)交易。信息 本地事务是其中的一部分 遏制范围(方法或活动) 会话),然后 未提交 . 这个 未解决的操作)是回滚任何 结束时未限制的工作 范围。您有多种选择:

    • 显式提交本地事务

      connection.commit(); // after the work has been performed
      
    • 将数据源更改为使用自动提交

      connection.setAutoCommit(true); //
      

      使用连接之前

    • Context ic = new InitialContext();
      UserTransaction ut =
      (UserTransaction) ic.lookup("java:comp/UserTransaction");
      ut.begin();
      // use connection here
      ut.commit();
      

    • 选择上的“servlet”选项卡 部署描述符编辑器和 在“WebSphere Extensions”下,然后 从“未解决的操作”到“提交” 下拉菜单。

    我建议明确地完成这项工作(并阅读整个答案)。

        2
  •  1
  •   rykhan    13 年前

    当表被锁定时会发生此异常,所以您已经在数据库中锁定了表,所以释放该锁并提交所做的任何更改。