Thanks for the feedback :) I am glad that after a few years of iterations we 
finally nailed it.

Andrus

> On Feb 28, 2016, at 2:52 PM, Hugi Thordarson <[email protected]> wrote:
> 
> Hi all.
> 
> I’d just like to chime in to mention how ridiculously useful this feature has 
> turned out to be. I’ve been using it since day one for audit logging, but 
> I’ve since used it in many other places to react to changes in the object 
> graph. Really, really nice.
> 
> Cheers,
> - hugi
> 
> 
> 
> 
>> On 9. okt. 2015, at 19:49, Andrus Adamchik <[email protected]> wrote:
>> 
>> Just committed an updated version that supports to-many relationships. 
>> Altered the model of individual object changes to separately track changes 
>> to attributes, to-one and to-many relationships:
>> 
>> https://github.com/apache/cayenne/blob/master/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/changemap/ObjectChange.java
>> 
>> Eventually we should probably reuse this model for internal Cayenne change 
>> tracking. It seems universal enough, will allow ObjectContext users to 
>> inspect changes prior to commit (which is doable now, but not easy), and 
>> will avoid multiple copies of "diffs".
>> 
>> Andrus
>> 
>> 
>>> On Sep 29, 2015, at 5:46 AM, Andrus Adamchik <[email protected]> wrote:
>>> 
>>> I just sent a pull request with the first cut of the implementation. My 
>>> plan is to try this new implementation with my audit system and if it works 
>>> well, apply it to master (hopefully by then CAY-2028 will also be ready). 
>>> The implementation I ended up with does not have JSON serialization. Just 
>>> pure objects. Here is how it works:
>>> 
>>> 1. Write a listener (currently requires an interface, but if needed we can 
>>> easily switch to annotations) :
>>> 
>>> public class L implements PostCommitListener {
>>> 
>>> @Override
>>> public void onPostCommit(ObjectContext originatingContext, ChangeMap 
>>> changes) {
>>>   // do something with your changes
>>> }
>>> }
>>> 
>>> 2. Configure Cayenne stack with "PostCommit" module:
>>> 
>>> Module m = PostCommitModuleBuilder.builder().listener(L1.class);
>>> ServerRuntime r = ServerRuntimeBuilder
>>> .builder()
>>> .addConfig("cayenne-lifecycle.xml")
>>> .addModule(m)
>>> .build();
>>> 
>>> 
>>> PostCommitModuleBuilder supports a few non-default options, such as 
>>> excluding entities, entity properties, and hiding "confidential" property 
>>> values, such as passwords using the existing @Auditable annotation. Or you 
>>> can write a custom PostCommitEntityFactory to support your own annotations.
>>> 
>>> TODO: there is not support for @AuditableChild yet. Need to think how to 
>>> better handle this one.
>>> 
>>> Comments are welcomed.
>>> 
>>> Andrus 
>> 
> 

Reply via email to