繁体   English   中英

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

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

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

java.sql.SQLException:DSRA9350E:全局事务期间不允许进行Connection.commit操作。 [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,位于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,位于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,位于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。

您的应用程序可能正在使用容器管理的事务或另一种托管连接。 使用托管事务时,您commit() ,这是由应用程序容器处理的(如果使用多个数据源,甚至可以使用分布式事务)。

请参阅JavaEE 7教程中的容器管理的事务

使用容器管理的事务划分的企业bean不得使用任何会干扰容器的事务划分边界的事务管理方法。 此类方法的示例是java.sql.ConnectioncommitsetAutoCommitrollback方法,或者javax.jms.Sessioncommitrollback方法。 如果需要控制事务划分,则必须使用应用程序管理的事务划分。

如果方法(或方法链)在没有Exception完成(除非在上下文中请求显式回滚commit()commit()将自动完成。

有一次我遇到了同样的问题。 当时我使用的是EJB 1.0,因此出现了问题,因为我没有在ejb-jar.xml内的Container Transaction节中映射EJB方法。

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

  2. 选中“非事务性数据源”属性。

暂无
暂无

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

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