系统的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的详细信息
明天贴代码
相关推荐
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。以上实例中 7、5 和 12 是操作数。关系运算符用于计算结果是否为 true 或者 false。逻辑运算符用于测定变量或值之间的逻辑。