2008-12-03 73 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事务提交时“。