使用JDBC提交事务时出错 - 在全局事务期间不允许操作Connection.commit

时间:2013-11-17 20:55:34

标签: sql oracle jdbc

尝试使用本地ejb中的jdbc提交事务时出现以下错误 connection.commit(); Oracle数据库

java.sql.SQLException:DSRA9350E:在全局事务期间不允许操作Connection.commit。 [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.commit(WSJdbcConnection.java:941) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.bmo.olbb.mostvisitedcount.ejb.MergeAuditRecordsBean.startOperation(MergeAuditRecordsBean.java:89) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.bmo.olbb.mostvisitedcount.ejb.MergeAuditRecordsBean.updatePageCountValues(MergeAuditRecordsBean.java:21) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.bmo.olbb.mostvisitedcount.ejb.EJSLocal0SLMergeAuditRecordsBean_9da6c3b0.updatePageCountValues(EJSLocal0SLMergeAuditRecordsBean_9da6c3b0.java) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.bmo.ctp.test.testEJBservlet.doGet(testEJBservlet.java:51) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:743) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1103) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:570) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:486) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1037) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLConnectionLink $ MyReadCompletedCallback.complete(SSLConnectionLink.java:644) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext $ SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:873) [17/11/13 15:33:00:621 EST] 00000029 SystemErr R at com.ibm.ws.util.ThreadPool $ Worker.run(ThreadPool.java:1473)

4 个答案:

答案 0 :(得分:3)

您的应用程序可能正在使用容器管理的事务或其他类型的托管连接。使用托管事务时,您不能自己commit(),因为它由应用程序容器处理(如果您使用多个数据源,甚至可能使用分布式事务)。

请参阅JavaEE 7教程中的Container-Managed Transactions

  

使用容器管理的事务划分的企业bean不得使用任何干扰容器事务划分边界的事务管理方法。此类方法的示例包括commit的{​​{1}},setAutoCommitrollback方法或java.sql.Connection的{​​{1}}和commit方法}。如果需要控制事务划分,则必须使用应用程序管理的事务划分。

如果方法(或方法链)在没有rollback的情况下完成,则自动完成javax.jms.Session(除非在上下文中请求显式回滚)。

答案 1 :(得分:3)

In XA-Datasources->WebSphere Application Server data source properties->WebSphere Application Server data source properties->click Non-transactional data source as True.

答案 2 :(得分:0)

有一次我有同样的问题。 那时我使用的是EJB 1.0,问题出现了,因为我没有在ejb-jar.xml里面的Container Transaction Section中映射EJB方法

答案 3 :(得分:0)

  1. 导航至 资源> JDBC> JDBC提供程序> JDBC_provider>数据源> data_source> WebSphere Application Server数据源属性

  2. 检查非事务性数据源属性。

相关问题