cayenne-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: Change audit framework
Date Wed, 23 Sep 2015 08:09:13 GMT
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":["root@example.com","root@example.org"]}}
{"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 <hugi@karlmenn.is> 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 <andrus@objectstyle.org> 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
> 


Mime
View raw message