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
-~----------~----~----~----~------~----~------~--~---

Reply via email to