2012-03-26 95 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 ...我現在可以進行交易了!