I'm not sure how #1 could happen unless there's something bypassing Lift's normal RequestVar handling. The RequestVar cleanup function explicitly closes the EM, which would normally close the transaction. For the second one, maybe that's a limitation of JDO. I've never seen that error before. In any case, the LocalEMF class has a constructor that takes an optional boolean that indicates whether you want to manage your own transactions. In your case, change your code to
object EntityManager extends LocalEMF("transactions-optional", true) with RequestVarEM But then it's your responsibility to handle all transactions. Derek On Thu, May 14, 2009 at 4:55 PM, ngug <naftoli...@gmail.com> wrote: > > Your reply shed a lot of insight on the problem, but it's still not > solved. > There's no one (known) action or sequence that triggers errors, but > here is what I have so far. > 1. When clicking Edit from the list I sometimes get in the console (no > stack trace): > May 14, 2009 6:38:54 PM > com.google.apphosting.utils.servlet.TransactionCleanupFi > lter handleAbandonedTxns > WARNING: Request completed without committing or rolling back > transaction with i > d 85. Transaction will be rolled back. > > 2. When clicking save after opening a nature (without modifying it) or > possibly just clicking back to the list, I get in the browser (similar > if not identical in the console): > > Exception occured while processing /natures/list > Message: javax.jdo.JDOFatalUserException: Illegal > argument > NestedThrowables: > java.lang.IllegalArgumentException: can't operate on multiple entity > groups in a single transaction. found both Element { > type: "Nature" > id: 42 > } > and Element { > type: "Nature" > id: 47 > } > > > org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException > (NucleusJDOHelper.java:396) > org.datanucleus.state.JDOStateManagerImpl.isLoaded > (JDOStateManagerImpl.java:1879) > lrbcol.model.Nature.jdoGetname(Nature.scala) > lrbcol.model.Nature.name(Nature.scala:18) > lrbcol.model.Nature.toString(Nature.scala:24) > java.lang.String.valueOf(String.java:2827) > scala.StringBuilder.append(StringBuilder.scala:234) > liftgae1.snippet.Natures$$anonfun$list$2.apply(Natures.scala:34) > liftgae1.snippet.Natures$$anonfun$list$2.apply(Natures.scala:34) > [I deleted the rest. That's this line: > NatureLocationType.all foreach {l=>println(l + " for " + > l.nature)} > ] > > > Caught and thrown by: > Message: java.lang.IllegalArgumentException: can't operate on multiple > entity groups in a single transaction. found both Element { > type: "Nature" > id: 42 > } > and Element { > type: "Nature" > id: 47 > } > > com.google.appengine.api.datastore.DatastoreApiHelper.translateError > (DatastoreApiHelper.java:28) > com.google.appengine.api.datastore.DatastoreApiHelper.makeSyncCall > (DatastoreApiHelper.java:55) > com.google.appengine.api.datastore.DatastoreServiceImpl$1.run > (DatastoreServiceImpl.java:109) > > com.google.appengine.api.datastore.TransactionRunner.runInTransaction > (TransactionRunner.java:29) > com.google.appengine.api.datastore.DatastoreServiceImpl.get > (DatastoreServiceImpl.java:95) > com.google.appengine.api.datastore.DatastoreServiceImpl.get > (DatastoreServiceImpl.java:68) > com.google.appengine.api.datastore.DatastoreServiceImpl.get > (DatastoreServiceImpl.java:56) > > > org.datanucleus.store.appengine.RuntimeExceptionWrappingDatastoreService.get > (RuntimeExceptionWrappingDatastoreService.java:62) > org.datanucleus.store.appengine.DatastorePersistenceHandler.get > (DatastorePersistenceHandler.java:78) > org.datanucleus.store.appengine.DatastorePersistenceHandler.get > (DatastorePersistenceHandler.java:88) > > org.datanucleus.store.appengine.DatastorePersistenceHandler.fetchObject > (DatastorePersistenceHandler.java:363) > > org.datanucleus.state.JDOStateManagerImpl.loadUnloadedFieldsInFetchPlan > (JDOStateManagerImpl.java:1597) > org.datanucleus.state.JDOStateManagerImpl.isLoaded > (JDOStateManagerImpl.java:1862) > lrbcol.model.Nature.jdoGetname(Nature.scala) > lrbcol.model.Nature.name(Nature.scala:18) > lrbcol.model.Nature.toString(Nature.scala:24) > java.lang.String.valueOf(String.java:2827) > scala.StringBuilder.append(StringBuilder.scala:234) > liftgae1.snippet.Natures$$anonfun$list$2.apply(Natures.scala:34) > liftgae1.snippet.Natures$$anonfun$list$2.apply(Natures.scala:34) > [I deleted the rest] > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to liftweb@googlegroups.com To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---