【问题标题】:Resource DATASOURCE rolled back in cleanup of LocalTransactionContainment资源 DATASOURCE 在 LocalTransactionContainment 的清理中回滚
【发布时间】:2011-03-10 23:15:51
【问题描述】:

我在 WebSphere Application Server 7、JDK 1.6 和 Oracle 11g 中工作。

我在使用 ejb 时总是收到此错误。

[7/1/10 17:12:28:770 机器人] 00000013 LocalTranCoor W WLTC0033W: 资源 jdbc/oraDS11 在清理中回滚 本地事务控制。 [7/1/10 17:12:28:773 机器人] 00000013 LocalTranCoor W WLTC0032W: 一个或 更多本地交易资源 在清理 a 期间回滚 LocalTransactionContainment。

这就是我从 WAS 中的数据源获取连接的方式。

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

任何帮助将不胜感激...

【问题讨论】:

    标签: java database oracle websphere datasource


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      根据错误消息,您正在本地事务中执行一些工作,并且没有提交它。未提交的工作在方法结束时由容器回滚(默认情况下)。

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

      LocalTransactionContainment 是什么 你在没有全球性的情况下得到 (XA) 交易。讯息 表示你做了一些 本地事务作为其中的一部分 遏制范围(方法或活动 session) 然后没有提交。这 默认行为(由 unresolved-action) 是回滚任何 在结束时未完成的工作 范围。您有多种选择:

      • 显式提交本地事务

        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();
        
      • 将未解决的操作更改为提交
        选择“Servlets”选项卡 部署描述符编辑器和 然后选择有问题的 servlet。 在“WebSphere Extensions”下,然后 “本地事务”设置 从“未解决的行动”到“提交” 下拉菜单。

      我建议明确提交工作(并阅读整个答案)。

      【讨论】:

      • erm .. 我已经更改了未解决的操作,提交不回滚(默认)...而且,我正在做的是一个简单的选择...我不必提交在任何选择之后...该消息出现在选择之后..
      • @Garis 您必须在选择后提交(如链接中所述):每个打开的连接都必须在关闭之前明确提交(或回滚)。即使您对该连接所做的只是一个 SELECT 查询。
      • 这有帮助!谢谢!虽然 connection.commit() 或 connection.setAutoCommit(true) 是简单的解决方案,并且可以解决手头的问题。我将工作放在全局事务中,即@TransactionAttribute(TransactionAttributeType.SUPPORTS)。这样,即使数据源实现更改为 ConnectionPoolDataSource 或 XADataSource,应用程序代码也不应调用 Connection 方法 commit、rollback 或 setAutoCommit(true)。它将继续扩大规模。另请参考:docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html
      猜你喜欢
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      • 2016-12-24
      • 2011-09-12
      相关资源
      最近更新 更多