【发布时间】:2011-03-30 13:03:13
【问题描述】:
我有一个需求,我需要在库存中捕获数据更改(不是审计)和生命周期状态。
技术: Jave、Oracle、Hibernate + JPA
对于数据更改,我们获得了要监控的数据元素列表。如果元素发生变化,我们将通知给定的第 3 方供应商。我想要做的是让这个通用服务成为我们可以提供给我们当前和未来的任何第 3 方供应商的服务。
我们不在乎是谁进行了更改,也不在乎新值是什么。
我们的想法是我们应用程序的数据层将在每个数据元素上使用注释。如果该数据元素发生了变化,那么它会将消息放入队列中。然后消息 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 个字段)。
然后,给定第 3 方的守护程序将根据它已订阅的字段(可能是所有字段)从该表中读取。然后它将读取创建要发送给第三方的消息所需的每个表。解耦数据的提供者和数据的使用者。
确定可用字段/操作的列表
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
订阅表,如果第 3 方公司 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 包会有所帮助
-
你有没有决定过你喜欢的方法?我正在处理一个类似的场景,并没有看到很多关于这个主题的文章。