I was able to replicate the error in the local dev environment, and
got this stack trace:


Jun 17, 2010 6:02:50 PM org.datanucleus.transaction.Transaction
rollback
SEVERE: Operation rollback failed on resource:
org.datanucleus.store.appengine.datastorexaresou...@1c95b4c, error
code UNKNOWN and transaction: [DataNucleus Transaction, ID=Xid=
enlisted
resources=[org.datanucleus.store.appengine.datastorexaresou...@1c95b4c]]

Jun 17, 2010 6:02:55 PM com.google.apphosting.utils.jetty.JettyLogger
warn
WARNING: /SaveLoc
javax.jdo.JDODataStoreException: Datastore Failure
    at
org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:
304)
    at org.datanucleus.jdo.JDOTransaction.commit(JDOTransaction.java:
132)
    at
org.datanucleus.store.appengine.jdo.DatastoreJDOTransaction.commit(DatastoreJDOTransaction.java:
56)
    at omr.SaveLoc.doPost(SaveLoc.java:74)
    at omr.SaveLoc.doGet(SaveLoc.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
    at
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
51)
    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
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:
122)
    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.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
70)
    at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
    at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:349)
    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 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:
212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:
404)
    at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
    at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:582)
NestedThrowablesStackTrace:
com.google.appengine.api.datastore.DatastoreFailureException: handle 1
not found
    at
com.google.appengine.api.datastore.DatastoreApiHelper.translateError(DatastoreApiHelper.java:
51)
    at
com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall(DatastoreApiHelper.java:
67)
    at com.google.appengine.api.datastore.DatastoreServiceImpl
$2.run(DatastoreServiceImpl.java:188)
    at
com.google.appengine.api.datastore.TransactionRunner.runInTransaction(TransactionRunner.java:
30)
    at
com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
176)
    at
com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
156)
    at
com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:
152)
    at
org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.put(RuntimeExceptionWrappingDatastoreService.java:
105)
    at
org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePersistenceHandler.java:
187)
    at
org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePersistenceHandler.java:
139)
    at
org.datanucleus.store.appengine.DatastorePersistenceHandler.put(DatastorePersistenceHandler.java:
134)
    at
org.datanucleus.store.appengine.DatastorePersistenceHandler.updateObject(DatastorePersistenceHandler.java:
536)
    at
org.datanucleus.state.JDOStateManagerImpl.flush(JDOStateManagerImpl.java:
4576)
    at
org.datanucleus.ObjectManagerImpl.flushInternal(ObjectManagerImpl.java:
2814)
    at org.datanucleus.ObjectManagerImpl.flush(ObjectManagerImpl.java:
2754)
    at
org.datanucleus.ObjectManagerImpl.preCommit(ObjectManagerImpl.java:
2893)
    at
org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:
369)
    at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:
256)
    at org.datanucleus.jdo.JDOTransaction.commit(JDOTransaction.java:
83)
    at
org.datanucleus.store.appengine.jdo.DatastoreJDOTransaction.commit(DatastoreJDOTransaction.java:
56)
    at omr.SaveLoc.doPost(SaveLoc.java:74)
    at omr.SaveLoc.doGet(SaveLoc.java:24)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
    at
org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
    at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
    at
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
51)
    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
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:
122)
    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.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:
70)
    at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
152)
    at com.google.appengine.tools.development.JettyContainerService
$ApiProxyHandler.handle(JettyContainerService.java:349)
    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 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:547)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:
212)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:
404)
    at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:
409)
    at org.mortbay.thread.QueuedThreadPool
$PoolThread.run(QueuedThreadPool.java:582)



On Jun 16, 8:05 am, shaz <[email protected]> wrote:
> Here is the code for reference. For background, there is a class
> called OMRUser which is a user class, and there is Location3 class.
> There is a one to many owned relationship between a user and locations
>
> snippet of USER class:
>
> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> public class OmrUser {
>     @PrimaryKey
>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>     private Key key;
>
>     @Persistent
>     private User gaeuser;
>
>     @Persistent(mappedBy = "omruser")
>     @Element(dependent = "true")
>     private List<Location3> userlocs;
>
>     @Persistent(mappedBy = "omruser")
>     @Element(dependent = "true")
>     private List<Driver> userdrivers;
>
>     @Persistent
>     private String accounttype;
>
> snippet of Location class:
>
> @PersistenceCapable(identityType = IdentityType.APPLICATION)
> public class Location3 implements Comparable<Location3> {
>
>     @PrimaryKey
>     @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
>     private Key key;
>
>     @Persistent
>     private OmrUser omruser;
>
> snippet of servlet to save locations
>
>        PersistenceManager pm = PMF.get().getPersistenceManager();
>         Transaction tx = pm.currentTransaction();
>         try {
>                 tx.begin();
>
>                 String select_query = "select from " + 
> OmrUser.class.getName();
>                 Query query = pm.newQuery(select_query);
>                         query.setFilter("gaeuser == paramAuthor");
>                         query.declareParameters("java.lang.String 
> paramAuthor");
>
>                         List<OmrUser> omruserquery = (List<OmrUser>)
> pm.newQuery(query).execute(user);
>
>                         if(omruserquery.iterator().hasNext()) {
>                                 OmrUser thisomruser = 
> omruserquery.iterator().next();
>                                 if(thisomruser.getNumlocs()<MaxSaveLocs){
>                                         thisomruser.addSingleLoc(location);
>                                         location.setOmruser(thisomruser);
>                                         pm.makePersistent(location);
>                                 log.info("Adding Location to existing OMR 
> User");
>                                 } else {
>                                         msg = "You have exceeded the maximum 
> number of locations you can
> save, please delete a location first.";
>                                 log.info("FAIL - Exceed max num locs");
>                                 }
>                         } else {
>                                 OmrUser newuser = new OmrUser(user, "Basic");
>                                 newuser.addSingleLoc(location);
>                                 pm.makePersistent(newuser);
>                                 location.setOmruser(newuser);
>                                 log.info("Created new user " + 
> newuser.getGaeuser().getEmail());
>                         }
>                         tx.commit();
>         } finally {
>             if (tx.isActive()) {
>                 tx.rollback();
>             }
>         }
>
> On Jun 15, 9:39 pm, shaz <[email protected]> wrote:
>
> > Hi, I have a functioning app and recently have hadintermittent
> > problems writing to the datastore.   I did not make any relevant code
> > changes, however in the last few days my attempts to write to the
> > datastore sometimes work and sometimes don't.
>
> > I am trying to save an object that is in a many to one relationship
> > with an existing persisted parent.  So, the logic works like this:
>
> >                                         - Parent pulled from the
> > datastore
> >                                         - Child created / instantiated
> > using constructor
>
> >                                         - Parent.addSingleChild(child);    
> > // the "addSingleChild" method
> > just adds the object argument to the collection of children
>
> >                                         - child.setParent(Parent);  // sets 
> > the Parent object to the
> > parent field
>
> > I am using transactions as explained in the documentation ending with
> > "finally {if (tx.isActive()) {tx.rollback(); } }"
>
> > When the servlet is called, the parent is called from the datastore
> > and the child object is created and added to the many to one mapping
> > to the pre-existing parent.
>
> > The child should automatically be persisted, since the parent is
> > already persistent, and the child is added to the collection of
> > children that map to the parent.   And it worked this way in the
> > past.  However, to be sure, i did add a pm.makePersistent(child).
> > Doesn't seem to help, still have theintermittentproblem.
>
> > Any suggestions would be appreciated, and if you need to see the
> > actual code I can post.  Thanks
>
> > appid is omrtest

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
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