当前位置: 代码迷 >> java >> 资源DATASOURCE回滚以清理LocalTransactionContainment
  详细解决方案

资源DATASOURCE回滚以清理LocalTransactionContainment

热度:52   发布时间:2023-07-16 17:45:50.0

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

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

[7/1/10 17:12:28:770 BOT] 00000013 LocalTranCoor W WLTC0033W:资源jdbc / oraDS11在清理LocalTransactionContainment中回滚了。 [7/1/10 17:12:28:773 BOT] 00000013 LocalTranCoor W WLTC0032W:在清理LocalTransactionContainment期间回滚了一个或多个本地事务资源。

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

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

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

根据错误消息,您正在本地事务中执行某些工作,而不是提交它 未提交的工作在方法末尾被容器回滚(默认情况下)。

对答案总结了所有这些内容,并且由于对其释义没有实质意义,因此我在下面引用它。

LocalTransactionContainment是在没有全局(XA)事务的情况下得到的结果。 该消息表明您作为该包含范围的一部分(方法或活动会话)执行了一些本地事务工作,然后没有提交 默认行为(由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”下,然后在“ Local Transaction”下,从下拉菜单中将“ Unresolved Action”设置为“ Commit”。

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

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

  相关解决方案