I think the only thing missing from this approach is a guarantee that
the audit data is committed in the same transaction as the data being
logged.

This is a requirement for my various projects.  If the audit data
cannot be committed, then the changes cannot be committed.



On Thu, Aug 27, 2015 at 7:11 AM, Andrus Adamchik <[email protected]> wrote:
> It appears that in mine and everybody else's work capturing object changes is 
> a must-have. We have these discussions on user@ periodically, and 70% of my 
> clients have one or another implementation in their apps. So maybe we can do 
> something about it in Cayenne. The first attempt at it is already available 
> since 3.1 [1]. Still AuditableFilter is more like an example to follow, than 
> a drop-in implementation. So everyone keeps coming back with that same 
> question about audit.
>
> The challenge here is spare the user from the change analysis, but allow to 
> customize a few extra things:
>
> 1. the mechanism where this data is stored (can be saved in the DB, broadcast 
> via MQ, stored in Kafka, etc.)
> 2. additional contents of the audit trail (security context, transaction id, 
> client IP address, etc.)
> 3. filtering entities we want to audit from other data changes.
>
> I think I'll be able to open-source a new version of the AuditableFilter that 
> is pretty close to this. It emits a stream of changes as JSON:
>
> {"ts":1427090346831,"by":"someuser","serverIP":"127.0.0.1","op":"UPDATE","id":"MyEntity:954619","changes":{"email":["[email protected]","[email protected]"]}}
>
> The stream is a complete change log that doesn't lose anything. This includes 
> all possible object graph operations (create, update, delete, relationship 
> changes, ID changes). The object model behind this framework is quite 
> reusable. Filtering can be done either with entity annotations, or straight 
> on the change object stream. STDOUT can be the default storage (and JSON - 
> the default format for that), and we let the users to override it.
>
> Does it sound like something you can use to rewrite your current audit 
> framework?
>
> Comments?
>
> Andrus
>
>
> [1] 
> https://github.com/apache/cayenne/tree/master/cayenne-lifecycle/src/main/java/org/apache/cayenne/lifecycle/audit

Reply via email to