On Thu, Nov 12, 2009 at 5:57 PM, David Pollak
<feeder.of.the.be...@gmail.com> wrote:
> Kris,
>
> There was a bunch of changes in the net.liftweb.mapper.DB code for
> transaction management, but I don't think that would impact JPA.
>
> Also, in M7, there were changes in how RequestVars are handled during Ajax
> requests... basically, state is snapshotted when the Ajax request is created
> and then that snapshot state is restored during the servicing of the Ajax
> request.  If the RequestVarEM stuff is being snapshotted, that could cause
> issues.
>
> Thanks,
>
> David

That sounds like it could very likely be the culprit, but I'm going to
have to dig a bit more to know for certain.

the RequestVarEM trait uses the following RequestVar:

  object emVar extends RequestVar[EntityManager](openEM()) {
    this.registerGlobalCleanupFunc(ignore => closeEM(this.is))

    override def __nameSalt = net.liftweb.util.Helpers.randomString(10)
  }

openEM() is supplied in my case by JndiEMF. If this would not be
called during handling of an AJAX request, that's definitely the
issue.

This brings to mind an issue I'd worried about a long time ago, back
when I had my own implementation of a JNDI resource acquisition trait
for persistence. We can tie into the cleanup phase of the RequestVar's
lifecycle with a cleanup func, but if the RequestVar is going to be
persisted across actual HTTP requests in the AJAX case, we will also
need additional lifecycle hooks. I'm actually kind of concerned about
this decision; it seems like it could really complicate usage of
RequestVar in cases where the container has additional stuff it does
related to the lifecycle of the HTTP request (like JTA).

Maybe there should be a separate AnyVar subclass that is intended for
this sort of persist-for-ajax situation?

Kris

>
> On Thu, Nov 12, 2009 at 4:49 PM, Kris Nuttycombe <kris.nuttyco...@gmail.com>
> wrote:
>>
>> Hi, all (Derek! :),
>>
>> Have there been significant changes in how transactions are handled by
>> lift-jpa since M6? Due to the rearrangement of the repository, I'm
>> having a hard time figuring out if the code has changed.
>>
>> I have a repeatable issue that shows up when changing between M6 and
>> SNAPSHOT wherein I now get
>> javax.persistence.TransactionRequiredExceptions when doing a merge
>> using a JndiEMF with RequestVarEM in an AJAX callback.
>>
>> Has anything major changed in this timeframe?
>>
>> Kris
>>
>>
>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> >
>

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