Hello,

The data appears to be added in the database, after transaction is rolled 
back. Here are some logs and traces from the log to explain what I mean:



   1. 2011-08-02 10:29:53.579
   
   com.evo.adm.contract.server.billing.payment.RealPaymentProcessor 
getBillDetails: Bill 
Key:ContractEntity("1478445")/BillEntity("147844510771988481584792271109360773021467817511312270193553")
   
   2. I2011-08-02 10:29:53.585
   
   com.evo.adm.accounting.server.PersistenceAccountBase findAccountByOwner: 
CertificateEntity found 1
   
   3. I2011-08-02 10:29:53.603
   
   com.opengrapes.common.TimeLogger resetAndLog: Making Transaction  executed 
in: 24 ms
   
   4. I2011-08-02 10:29:53.604
   
   com.opengrapes.common.TimeLogger resetAndLog: Generating Receipt executed 
in: 1 ms
   
   5. I2011-08-02 10:29:53.686
   
   com.opengrapes.common.TimeLogger resetAndLog: Saving Receipt executed in: 82 
ms
   
   6. I2011-08-02 10:29:53.692
   
   com.opengrapes.common.TimeLogger resetAndLog: Print Receipt executed in: 6 ms
   
   7. E2011-08-02 10:30:00.805
   
   org.datanucleus.transaction.Transaction commit: Operation commit failed on 
resource: org.datanucleus.store.appengine.DatastoreXAResource@19881f0, error 
code UNKNOWN and transaction: [DataNucleus Transaction, ID=Xid=
   
   8. E2011-08-02 10:30:00.807
   
   com.evo.adm.contract.server.billing.payment.ProcessPaymentOrderActionHandler 
handle: Transaction rolled back due to failure during commit
   javax.jdo.JDOException: Transaction rolled back due to failure during commit
        at 
org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:419)
        at org.datanucleus.jdo.JDOTransaction.commit(JDOTransaction.java:132)
        at 
org.datanucleus.store.appengine.jdo.DatastoreJDOTransaction.commit(DatastoreJDOTransaction.java:56)
        at 
com.wideplay.warp.persist.jdo.JdoLocalTxnInterceptor.invoke(JdoLocalTxnInterceptor.java:68)
        at 
com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
        at 
com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
        at 
com.evo.adm.contract.server.billing.payment.RealPaymentProcessor$$EnhancerByGuice$$50b371d5.chargeOrder(<generated>)
        at 
com.evo.adm.contract.server.billing.payment.ProcessPaymentOrderActionHandler.handle(ProcessPaymentOrderActionHandler.java:95)
        at 
com.evo.adm.contract.server.billing.payment.ProcessPaymentOrderActionHandler.handle(ProcessPaymentOrderActionHandler.java:35)
        at 
com.evo.gad.dispatch.DefaultActionDispatcher.dispatch(DefaultActionDispatcher.java:41)
        at 
com.evo.adm.communication.server.rpc.RpcServiceImpl.execute(RpcServiceImpl.java:134)
        at sun.reflect.GeneratedMethodAccessor70.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_$1.run(Method_.java:165)
        at java.security.AccessController.doPrivileged(Native Method)
        at 
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.privilegedInvoke(Method_.java:163)
        at 
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke_(Method_.java:124)
        at 
com.google.apphosting.runtime.security.shared.intercept.java.lang.reflect.Method_.invoke(Method_.java:43)
        at 
com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
        at 
com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
        at 
com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
        at 
com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at 
com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:216)
        at 
com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:141)
        at 
com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:95)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
        at 
com.google.sitebricks.SitebricksFilter.doFilter(SitebricksFilter.java:67)
        at 
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:129)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at 
com.google.sitebricks.HiddenMethodFilter.doFilter(HiddenMethodFilter.java:74)
        at 
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:129)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at 
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at 
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at com.evo.adm.server.EncodingFilter.doFilter(EncodingFilter.java:25)
        at 
com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:129)
        at 
com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
        at 
com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
        at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlobUploadFilter.java:97)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionFilter.java:35)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
        at 
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
        at 
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
        at 
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
        at 
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
        at 
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
        at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
        at 
com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionHandlerMap.java:249)
        at 
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
        at org.mortbay.jetty.Server.handle(Server.java:326)
        at 
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
        at 
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
        at 
com.google.apphosting.runtime.jetty.RpcRequestParser.parseAvailable(RpcRequestParser.java:76)
        at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
        at 
com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:135)
        at 
com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:260)
        at 
com.google.apphosting.base.RuntimePb$EvaluationRuntime$2.handleRequest(RuntimePb.java:9805)
        at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:422)
        at com.google.net.rpc.impl.Server$RpcTask.runInContext(Server.java:579)
        at 
com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:449)
        at com.google.tracing.TraceContext.runInContext(TraceContext.java:689)
        at 
com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:327)
        at 
com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:319)
        at 
com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:447)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)
   NestedThrowablesStackTrace:
   
   
com.google.appengine.api.datastore.DatastoreTimeoutException: The datastore 
operation timed out, or the data was temporarily unavailable.
        at 
com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:46)
        at 
com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:98)
        at 
com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:69)
        at 
com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:67)
        at 
com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:71)
        at 
com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32)
        at 
com.google.appengine.api.datastore.TransactionImpl.commit(TransactionImpl.java:76)
        at 
org.datanucleus.store.appengine.DatastoreTransaction.commit(DatastoreTransaction.java:61)
        at 
org.datanucleus.store.appengine.DatastoreXAResource.commit(DatastoreXAResource.java:88)
        at org.datanucleus.transaction.Transaction.commit(Transaction.java:149)
        at 
org.datanucleus.transaction.TransactionManager.commit(TransactionManager.java:95)


com.google.appengine.api.datastore.DatastoreTimeoutException: The datastore 
operation timed out, or the data was temporarily unavailable.
        at 
com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:46)
        at 
com.google.appengine.api.datastore.DatastoreApiHelper$1.convertException(DatastoreApiHelper.java:98)
        at 
com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:69)
        at 
com.google.appengine.api.utils.FutureWrapper.get(FutureWrapper.java:67)
        at 
com.google.appengine.api.datastore.FutureHelper.getInternal(FutureHelper.java:71)
        at 
com.google.appengine.api.datastore.FutureHelper.quietGet(FutureHelper.java:32)
        at 
com.google.appengine.api.datastore.TransactionImpl.commit(TransactionImpl.java:76)
        at 
org.datanucleus.store.appengine.DatastoreTransaction.commit(DatastoreTransaction.java:61)
        at 
org.datanucleus.store.appengine.DatastoreXAResource.commit(DatastoreXAResource.java:88)
        at org.datanucleus.transaction.Transaction.commit(Transaction.java:149)
        at 
org.datanucleus.transaction.TransactionManager.commit(TransactionManager.java:95)



ContractEntity: name=1478445 > *BillEntity: 
name=147844510771988481584792271109360773021467817511312270193553*

The problem is that after the rollback, the data appears in the datastore. In 
this case BillEntity with 
ID=*147844510771988481584792271109360773021467817511312270193553*. Any idea 
where I'm doing something wrong or there is some datastore issue? 

Please note that all Contract, Bill and Receipt are in the same entity group. 


btw, I'm using custom JDO support for warp-persist ( 
http://code.google.com/p/warp-persist/issues/attachmentText?id=38&aid=-4857876859664333894&name=jdo_support.diff&token=9e6549dc59809146483446f786869682
 - JdoLocalTxnInterceptor) and the transactions are handled by:

@Transactional(rollbackOn = Exception.class)

....

So when any exception occurs, the transaction is rolled back immediately. 


-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/Cm-m4-JtzrsJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.

Reply via email to