系统的domain修改记录log
1、要求的系统功能
???? 系统采用spring + hibernate。
???? 对对象的属性修改进行记录,记录的内容包括:类名、对象ID、修改时间、修改的属性名、修改前的值和修改后的值。
???? 对新增对象的属性进行记录。记录的内容包括:类名、对象ID、增加时间、属性名、插入的值。
???? 对删除对象的属性进行记录。记录的内容包括:类名、对象ID、删除时间、属性名、值。
???? 另外的要求,只对某一些类进行记录。如果有一个类如Order,它有Order Line,那么OrderLine的修改应该归入Order类中。
2、实现:
??? a)新建一个接口,Logable,
??? b)新建hibernate的监听类,用来监听onSave,onFlushDirty, onDelete, afterTransactionComminted四个方法
??? 分别用来:取得对象的插入数据、对象的更新数据、对象的删除数据、在成功commit后将写log。(关于这部份的操作,我们让HistoryStorage类来做)
?? 在spring的配置文件中,关于hibernate的配置中加入这个监听器。
?? 从spring的源码中,我们可以看到:这个监听器是属于session的,所以不用做异步处理。
?? c)我们在HistoryStorage中,都是将属性转化成String格式,然后存储在N个EntityLog类中(有多少个Logable对象进行修改,就有多少个EntityLog)。
?? d)写log。要有两个步骤:写数据库和将操作信息写进文件进行存储。
??? 将EntityLog保存成json的格式。存储的地点根据对应的存储方式来决定。(对象的存储方式在配置文件中设定)
?? 由存储方式生成存储路径,并将json数据写入之后,将类名、对象ID、操作类型(增删改)和存储路径写入数据库。
? e)读log。有两种方式的读log:读对象的修改统计和某一次修改的具体信息
?? 读修改统计:从log数据表中读出log信息。
?? 读一次的具体修改信息:从存储路径读出json数据,转化为EntityLog对象,用户自定义输出格式。
?
这其中,用户可以自定义的地方是:
1、LogWriter/LogReader:getPath和write方法/parsePath和reader方法
2、用户页面如何显示Log的统计和log的详细信息
?
明天贴代码
?
?
?
?
?
1 楼 Jerrick 2011-12-01 说好的代码呢