可能能用到的方法(类):
- DatabaseManagementService.xxxregister(xxxlistener);
- transactionData: creatednode, deleted node…
如何得到WS和RS?
WS应该好弄,在TransactionEventHandler的beforeCommit里面可以直接读到被修改的数据,然后将这个数据存到WS里面。但是RS就不好弄了,因为数据库读到的数据,和读操作返回的数据,是两个概念。我们需要记录的是数据库读到的数据,触发读操作的动作都有哪些?除了显示的调用读,是不是还有别的隐式调用读的操作?而且我们怎么才能记录每一个读到的数据?
另一个问题是,在一个事务A进行validation test的时候,另一个事务可能读了新的数据X,而这个X可能被A写。validation test的时候,暂停正在读的进程,会很影响速率啊。
现在的一个想法是,在transactionManager上面建立一个CustomTransactionManager,这个manager里面有一个listener,每当开启一个新事务的时候,CustomTransactionManager会记录这个事务的WS、RS(在事务执行的过程中,Manager会收集它的信息。比武beforecommit的时候获得WS集合并触发validation。事务运行的过程中将读过的数据(或许是ID)发给manager)。
可以建立一个类DnMonitor。这个类里面存放我们需要监测的所有信息,在连接数据库的时候被激活,并且有接受信息的接口,根据收到的信息执行相应的操作。这个类可以是一个中转站,我们再写一些别的类实现具体的,比如validation功能。这样的话,我们需要弄明白到底哪些类需要被customerized, 哪些不需要?
是否可以通过日志获得读操作?
validation是否可以增加规则,比如针对read only的事务等等,或者对RS也进行莫种程度上的验证?
Validation的时候,这个进程自己的RS和WS集合肯定是已经知道了的,至于RS集合未收集完成的进程,我们其实先不需要管他们啊!???
现在先:
建立monitor类获得我们所需要的所有信息
然后再想怎么弄validation test