问题描述
我在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();
任何帮助将不胜感激...
1楼
根据错误消息,您正在本地事务中执行某些工作,而不是提交它 。 未提交的工作在方法末尾被容器回滚(默认情况下)。
对答案总结了所有这些内容,并且由于对其释义没有实质意义,因此我在下面引用它。
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”。
我建议明确地提交工作(并阅读整个答案)。
2楼
当表被锁定时会发生此异常,因此您已将表锁定在数据库中,因此请释放该锁定并提交所做的任何更改。