Just a pair of values:
public class A2PropertyChange {
private Object oldValue;
private Object newValue;
...
}
and as I've shown earlier, my system would emit a stream of JSON messages like
this:
{"ts":1427090346831,"by":"someuser","clientIP":"10.1.1.1","serverIP":"127.0.0.1","op":"UPDATE","id":"MyEntity:954619","changes":{"email":["[email protected]","[email protected]"]}}
{"ts":1441285381823,"by":"someotheruser","clientIP":"10.1.1.2","serverIP":"127.0.0.1","op":"DELETE","id":"MyOtherEntity:3279984:17","snapshot":{"favorite":true,"sequence":0}}
We'd send them to Apache Kafka, so that other internal apps can process them
sequentially at their leisure.
Andrus
> On Sep 23, 2015, at 10:55 AM, Hugi Thordarson <[email protected]> wrote:
>
> This looks really great! Would you mind sharing how the class
> A2PropertyChange looks?
>
> Cheers,
> - hugi
>
>
>
>> On 22. sep. 2015, at 19:57, Andrus Adamchik <[email protected]> wrote:
>>
>> Here is the design of the audit framework for everyone's review:
>>
>> https://issues.apache.org/jira/browse/CAY-2030
>>
>> The way it will work from the user perspective is this:
>>
>> // bootstrap the filter by adding an extra Cayenne-provided module to
>> // runtime. Optionally add your own module that overrides context provider
>> // (e.g. to store request IP address and user name).
>> ServerRuntime r = ServerRuntimeBuilder.builder().addModule(new
>> WhateverModuleNameWeUse()).build();
>>
>> // register listener
>> r.getDataDomain().addListener(new MyListener());
>>
>>
>> // listener code
>> class MyListener {
>>
>>
>> @PostCommit
>> void processAsChangeset(Map<ObjectId, ObjectChangeSet> map) {..}
>>
>> // optionally can take a changeset serialized to JSON
>> @PostCommit
>> void processAsJSON(Map<ObjectId, String> map) {..}
>> }
>>
>> Andrus
>