我有一個要求,即需要在庫存中捕獲數據更改(而不是審計)和生命週期狀態。如何構建變更跟蹤系統 - 不是審計系統
技術: 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