2012-03-26 54 views
0

我的应用程序试图在DB2服务器上的2个数据库上执行分布式事务,应用程序服务器是websphere 6.1并使用Atomikos作为TM。 javax.transaction.RollbackException:事务提交抛出异常:设置为仅回滚的事务

UserTranaction.commit()与下面的异常交易失败设置为仅回滚 完整的堆栈跟踪是:

[3/26/12 12:08:43:880 EDT] 0000001f SystemErr  R javax.transaction.RollbackException: Transaction set to rollback only 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.jta.TransactionImp.rethrowAsJtaRollbackException(TransactionImp.java:70) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:250) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java:498) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.jta.UserTransactionImp.commit(UserTransactionImp.java:129) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.Servlet.InitialServlet.doPost(InitialServlet.java:131) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1101) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:569) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R Caused by: com.atomikos.icatch.RollbackException: Transaction set to rollback only 
    at com.atomikos.icatch.imp.TxRollbackOnlyStateHandler.commit(TxRollbackOnlyStateHandler.java:84) 
    at com.atomikos.icatch.imp.CompositeTransactionImp.doCommit(CompositeTransactionImp.java:319) 
    at com.atomikos.icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:79) 
    at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:236) 
    at com.atomikos.icatch.jta.TransactionManagerImp.commit(TransactionManagerImp.java:498) 
    at com.atomikos.icatch.jta.UserTransactionImp.commit(UserTransactionImp.java:129) 
    at com.Servlet.InitialServlet.doPost(InitialServlet.java:131) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:763) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1101) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:569) 
    at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:478) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3440) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:267) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:815) 
    at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1461) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:118) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387) 
    at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:195) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:743) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:873) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473) 

[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.imp.TxRollbackOnlyStateHandler.commit(TxRollbackOnlyStateHandler.java:84) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.imp.CompositeTransactionImp.doCommit(CompositeTransactionImp.java:319) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.imp.CompositeTerminatorImp.commit(CompositeTerminatorImp.java:79) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  at com.atomikos.icatch.jta.TransactionImp.commit(TransactionImp.java:236) 
[3/26/12 12:08:43:896 EDT] 0000001f SystemErr  R  ... 24 more 

我没有设置交易仅在代码中回滚。我想它的默认设置。我想改变它,而不是把它设置为rollbackOnly。另外,我在事务之后明确地调用了commit()。为什么我仍然得到这个异常?我如何确保交易得到承诺?

回答

0

解决了这个问题! 这里是我工作:

  1. 打开Web部署描述符
  2. 选择其中发起交易的Servlet。
  3. 对于Servlet,选择Websphere Extensions> Local Transaction。
  4. 将解析器设置为“ContainerAtBoundary”和未解决的操作:回滚。
  5. 保存并重新发布。

Voila ...我现在可以进行交易了!