系统的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的详细信息

明天贴代码

相关推荐