2012-03-26 11 views
0

Meine Anwendung versucht, eine verteilte Transaktion für 2 Datenbanken auf einem DB2-Server auszuführen, der Anwendungsserver ist websphere 6.1 und verwendet Atomikos als TM.Transaction commit werfende Ausnahme: Transaktion nur für Rollback gesetzt

UserTranaction.commit() mit folgenden Ausnahme versagt: javax.transaction.RollbackException: Transaktion setzt nur Den vollständigen Stack-Trace rückgängig zu machen ist:

[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 

Ich habe nicht die Transaktion eingestellt Rollback nur im Code. Ich denke, es ist standardmäßig eingestellt. Ich möchte es ändern und nicht auf RollbackOnly setzen. Außerdem rufe ich commit() explizit nach der Transaktion auf. Warum bekomme ich immer noch diese Ausnahme? Wie stelle ich sicher, dass die Transaktion festgeschrieben wird?

Antwort

0

Das Problem gelöst! Hier ist, was für mich gearbeitet:

  1. Öffnen Sie das Web Deployment Descriptor
  2. die Servlet auswählen, die die Transaktion initiiert.
  3. Wählen Sie für das Servlet die Websphere Extensions> Lokale Transaktion.
  4. Setzen Sie den Resolver als "ContainerAtBoundary" und nicht aufgelöste Aktion: Rollback.
  5. Speichern und erneut veröffentlichen.

Voila ... Ich kann die Transaktion jetzt begehen !!