Java 资源数据源在清除LocalTransactionContain时回滚
我在WebSphereApplicationServer7、JDK1.6和Oracle11g中工作 当使用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中的数据源获取连接的方式Java 资源数据源在清除LocalTransactionContain时回滚,java,database,oracle,websphere,datasource,Java,Database,Oracle,Websphere,Datasource,我在WebSphereApplicationServer7、JDK1.6和Oracle11g中工作 当使用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:一个或多个 需要更多的本地事
javax.sql.DataSource ds = (javax.sql.DataSource) naming.lookup("DataSource");
conn= ds.getConnection();
如果您有任何帮助,我们将不胜感激。从错误消息中可以看出,您正在本地事务中执行某些工作,没有提交它。未提交的工作由方法末尾的容器回滚(默认情况下) 这个答案很好地总结了这一切,因为解释它没有实际意义,我在下面引用它 一个
LocalTransactionContainment
是什么
你在没有一个全球性的
(XA)交易。信息
表示您执行了某些操作
本地交易是其中的一部分
包含范围(方法或活动)
然后,没有提交。这个
默认行为(由
未解决的操作)是回滚任何
结束时的未限制工作
范围您有许多选择:
- 显式提交本地事务
connection.commit(); // after the work has been performed
Context ic = new InitialContext(); UserTransaction ut = (UserTransaction) ic.lookup("java:comp/UserTransaction"); ut.begin(); // use connection here ut.commit();
- 将数据源更改为使用自动提交
在使用连接之前connection.setAutoCommit(true); //
- 将工作放置在全局事务中
connection.commit(); // after the work has been performed
Context ic = new InitialContext(); UserTransaction ut = (UserTransaction) ic.lookup("java:comp/UserTransaction"); ut.begin(); // use connection here ut.commit();
- 将未解决的操作更改为提交
选择上的“servlet”选项卡 部署描述符编辑器和 然后选择有问题的servlet。 在“WebSphere Extensions”下,然后 “本地事务”设置 从“未解决的操作”到“提交” 下拉菜单
我建议明确提交工作(并阅读整个答案)。当表被锁定时会发生此异常,因此您已将表锁定在数据库中,所以请释放该锁并提交您所做的任何更改。erm。。我已将未解决的操作更改为提交而不是回滚(默认)。。。而且,我所做的是一个简单的选择。。。我不必做任何选择后提交。。。消息出现在select之后。@Garis您确实必须在select之后提交(如链接中所述):在关闭之前,必须显式提交(或回滚)每个打开的连接。即使您对该连接所做的只是一个SELECT查询。这很有帮助!非常感谢。尽管connection.commit()或connection.setAutoCommit(true)是简单的解决方案,可以解决当前的问题。我将工作放在一个全局事务中,即@TransactionAttribute(TransactionAttribute.SUPPORTS)。这样,即使数据源实现更改为ConnectionPoolDataSource或Xadasource,应用程序代码也不应调用连接方法commit、rollback或setAutoCommit(true)。它将继续扩大规模。另请参考:docs.oracle.com/javase/tutorial/jdbc/basics/sqldatasources.html