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