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.