2008-12-03 100 views
7

我有一個連接到遠程Oracle數據庫的視圖的Java應用程序。Oracle表更改監視器

有誰知道Java中的一種方式來監視此表的更改嗎?即如果有插件的更新等,我需要作出反應。

+0

監控數據庫表的變化是'設計異味'。您應該考慮引入由企業服務總線(ESB)支持的事件驅動體系結構(EDA)。例如Mule(www.mulesoft.com)。 – 2011-12-22 09:44:51

+5

好多流行語和「體系結構」總是正確的答案 – Gaius 2011-12-22 16:00:25

回答

5

您可以在表上執行INSERT/UPDATE/DELETE觸發器,以便在對錶進行「數據」更改時執行某些操作。 (而不是改變表的結構)

我相信10g也支持視圖觸發器。

但我不確定如何通過查詢來通知其他java進程。

對不起。

你可能會創建一些解決方案,其中java應用程序有一個「偵聽」服務器,並且數據庫將其推回一條消息。但聽起來很難維持。

Justin Cave在評論中建議您可以配置Oracle Streams以發送Java應用程序可以通過JMS訂閱的邏輯更改記錄(LCR)。或者觸發器可以將記錄寫入Java可以通過JMS訂閱的高級隊列。

你仍然需要警惕的Oracle transations的.. 由於甲骨文方式交易工作,觸發條件會在變化,但它也可能觸發多次..

和anycase的Java應用程序無法在執行提交之前「查看」更改。

+0

根據體系結構的重要性,您可以配置Oracle Streams以發送Java應用程序可以通過JMS訂閱的邏輯更改記錄(LCR)。或者觸發器可以將記錄寫入Java可以通過JMS訂閱的高級隊列。 – 2008-12-03 14:54:05

10

看看Oracle Change Notification,這是一個非常有趣的Oracle功能。

從Oracle文檔:「數據庫更改通知」是一項功能,它使客戶端應用程序能夠向數據庫註冊查詢,並接收通知以響應與查詢關聯的對象上的DML或DDL更改。數據庫在DML或DDL事務提交時「。