我有一个要求,即需要在库存中捕获数据更改(而不是审计)和生命周期状态。如何构建变更跟踪系统 - 不是审计系统
技术: java的,甲骨文的Hibernate + JPA
对于数据的变化,我们已经考虑到要被监控的数据元素的列表。如果元素发生变化,我们要通知给定的第三方供应商。我想要做的就是将这个通用服务提供给我们当前和未来的第三方供应商。
我们不关心是谁进行了更改,或者新的价值是什么改变了。
思想是我们的应用程序的数据层会在每个数据元素上使用注释。如果该数据元素发生更改,则会将消息放入队列中。消息bean然后会读取队列并在表中创建一个条目。
表看起来像下面这样:
Table Name: ATL_CHANGE_TRACKER
Key columns
INVENTORY_ID Inventory Id of the vehicle
SALEEVENT_ITEM_ID SaleEvent item of the vehicle
FIELD_CHANGED_ID Id of the field that got changed or action. Link to subscription
UPDATE_DTM Indicates the date time when change occured.
对于一个给定的库存,我们可以在这台长达200项(监控跨多个表200场)。
然后,给定第三方的守护程序将根据它已订阅的字段(可能是所有字段)从此表读取该表。然后,它会读取每个表需要创建发送给第三方的消息。将数据的提供者和数据的用户分开。
识别字段/可用
Table Name: ATL_FIELD_ACTION
Key columns
ID
NAME Name of the field/action - Example Color,Make
REC_CRE_TIME_STAMP
REC_CRE_USER_ID
LAST_UPDATE_USER_ID
LAST_UPDATE_TIME_STAMP
认购表,如果第三方XYZ公司有兴趣在60场操作的列表,在60场将被映射到这个表。
ATL_FIELD_ACTION_SUBSCRIPTION
Key columns
ATL_FIELD_ACTION_ ID ID of the atl_field_action table
CONSUMER 3rd Party Name
FUNCTION Name of the 3rd Party Transmission that it is used for
STATUS
REC_CRE_TIME_STAMP
REC_CRE_USER_ID
LAST_UPDATE_USER_ID
LAST_UPDATE_TIME_STAMP
第二部分是会有哪个将需要也将条记录库存的生命周期操作。在这种情况下,当库存状态发生变化时,消息将被放置在同一队列中,并且该条目将被输入到同一个表中。
再次,守护进程将已经订阅了这些国家和将收集的那些它感兴趣的
这里的目标是不是有业务层/数据层关心谁想要的数据 - 只是它需要提供,所以感兴趣的人可以得到它。
不知道是否有人做过这样的事情 - 任何问题 - 现成的 - 开源解决方案来做到这一点。
也许DBMS_ALERT包会帮助 – 2010-08-27 07:10:36
你曾经决定过你喜欢的方法吗?我正在处理类似的情况,并没有看到有关此主题的很多信息。 – Fil 2011-06-13 15:17:19