简体   繁体   English

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

[英]Error committing transaction using JDBC - Operation Connection.commit is not allowed during a global transaction

Am getting the following error when am trying to commit transaction using jdbc from a local ejb connection.commit(); 当尝试从本地ejb connection.commit()使用jdbc提交事务时,出现以下错误。 Oracle database Oracle数据库

java.sql.SQLException: DSRA9350E: Operation Connection.commit is not allowed during a global transaction. 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 [17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.commit(WSJdbcConnection.java:941)[17/11/13 15:33:00 :621 EST] 00000029在com.bmo.olbb.mostvisitedcount.ejb.MergeAuditRecordsBean.startOperation(MergeAuditRecordsBean.java:89)的SystemErr R [17/11/13 15:33:00:621 EST]在com.bmo的00000029 SystemErr R .olbb.mostvisitedcount.ejb.MergeAuditRecordsBean.java:21)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R在com.bmo.olbb.mostvisitedcount.ejb.EJSbn0SLMergeAuditRecordsValue0 EJSLocal0SLMergeAuditRecordsBean_9da6c3b0.java)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.bmo.ctp.test.testEJBservlet.doGet(testEJBservlet.java:51)[17/11/13 15:33 :00:621 EST] 00000029 SystemErr R,位于javax.servlet.http.HttpServlet.service(HttpServlet.java:743)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于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(W :621 EST] 00000029 SystemErr R,位于com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1103)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm .ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:570)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest( ServletWrapper.java:486)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440)[17/11 / 13 15:33:00:621 EST] 00000029 com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267)的SystemErr R [13/11/13 15:33:00:621 EST] 00000029 com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815)上的SystemErr R [13/11/13 15:33:00:621 EST] 00000029 com.ibm.ws.wswebcontainer.WebContainer上的SystemErrR。 handleRequest(WebContainer.java:1461)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.webcontainer.channel.WCChannelLink.ready(W CChannelLink.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. CChannelLink.java:118)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)[ 17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)[17/11/13 15: 33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:267)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.ssl.channel.impl.SSLConnectionLink.determineNextChannel(SSLConnectionLink.java:1037)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws .ssl.channel.impl.SSLConnectionLink $ MyReadCompletedCallback.complete(SSLConnectionLink.java:644)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.ssl.channel.impl。 SSLReadServiceContext $ SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于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) ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture .java:217)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)[17/11/13 15: 33:00:621 EST] 00000029 SystemErr R,位于com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com。 ibm.io.async.ResultHandler.complete(ResultHandler.java:195)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R在com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java :743)[17/11/13 15:33:00:621 EST] 00000029 SystemErr R,位于com.ibm.io.async.ResultHandler $ 2.run(ResultHandler.java:873)[17/11/13 15:33 :00:621 EST] 00000029 SystemErr R,位于com.ibm.ws.util.ThreadPool $ Worker.run(ThreadPool.java:1473)

在XA-Datasources-> WebSphere Application Server数据源属性-> WebSphere Application Server数据源属性->单击非事务数据源为True。

Your application is probably using a Container-Managed Transaction or another kind of managed connection. 您的应用程序可能正在使用容器管理的事务或另一种托管连接。 When using managed transactions you are not allowed to commit() yourself, as that is handled by the application container (maybe even using a distributed transaction if you are using multiple datasources). 使用托管事务时,您commit() ,这是由应用程序容器处理的(如果使用多个数据源,甚至可以使用分布式事务)。

See Container-Managed Transactions in the JavaEE 7 tutorial: 请参阅JavaEE 7教程中的容器管理的事务

Enterprise beans that use container-managed transaction demarcation must not use any transaction-management methods that interfere with the container's transaction demarcation boundaries. 使用容器管理的事务划分的企业bean不得使用任何会干扰容器的事务划分边界的事务管理方法。 Examples of such methods are the commit , setAutoCommit , and rollback methods of java.sql.Connection or the commit and rollback methods of javax.jms.Session . 此类方法的示例是java.sql.ConnectioncommitsetAutoCommitrollback方法,或者javax.jms.Sessioncommitrollback方法。 If you require control over the transaction demarcation, you must use application-managed transaction demarcation. 如果需要控制事务划分,则必须使用应用程序管理的事务划分。

A commit() is done automatically if the method (or chain of methods) completes without an Exception (unless an explicit rollback is requested on the context). 如果方法(或方法链)在没有Exception完成(除非在上下文中请求显式回滚commit()commit()将自动完成。

One time I had de same problem. 有一次我遇到了同样的问题。 At that time I was using EJB 1.0 and the problem was happening because I did not map the EJB method in Container Transaction Section inside the ejb-jar.xml 当时我使用的是EJB 1.0,因此出现了问题,因为我没有在ejb-jar.xml内的Container Transaction节中映射EJB方法。

  1. Navigate to Resources > JDBC > JDBC providers > JDBC_provider > Data sources > data_source > WebSphere Application Server data source properties 导航到资源> JDBC> JDBC提供程序> JDBC_provider>数据源> data_source> WebSphere Application Server数据源属性

  2. Check Non-transactional data source property. 选中“非事务性数据源”属性。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM