Hi John,

We currently call PRE_PERSIST and PRE_UPDATE in a bad place - the context has 
already started the commit, analyzed the changes and passed them down to 
DataDomain. So there's a big difference with these 2 as compared to say 
POST_ADD and PRE_REMOVE. And I am not even sure what happens if you change 
objects in the same context with the former :) I suspect Cayenne will not be 
able to pick up your new changes.

So almost looks like we need a better events model. Perhaps taking PRE_PERSIST 
and PRE_UPDATE out of the DataDomain and into the ObjectContext, invoked before 
the context analyzes object deltas and sends them downstream. And then adding 
the code that you mentioned - catching updates that are the results of 
PRE_UPDATE invocation on some other object. Should be a fun algorithm to 
implement :) Totally doable of course, but we need to ensure there's no endless 
recursion, etc.

Andrus


> On Sep 15, 2015, at 2:16 PM, John Huss <johnth...@gmail.com> wrote:
> 
> I've noticed that during the PRE_UPDATE lifecycle callback, if you update a
> different object the PRE_UPDATE callback is not invoked for that object
> before the commit occurs.  It would be preferable to have the callback
> still execute before the commit.
> 
> For example,
> 
> I am using PRE_UPDATE to conditionally update a modification time
> attribute.  In some cases I want to update other objects in PRE_UPDATE as
> well in response to a change.  If I do that I find that PRE_UPDATE is not
> being called on these other objects and that their modification time
> doesn't change (although all the changes as saved).
> 
> Is it ok to change this behavior?  I assume PRE_PERSIST behaves the same
> way, but I haven't tried it.
> 
> John


Reply via email to