如何使用 Oracle 触发器通知 JBoss
Posted
技术标签:
【中文标题】如何使用 Oracle 触发器通知 JBoss【英文标题】:How to notify JBoss with Oracle trigger 【发布时间】:2012-06-16 09:49:48 【问题描述】:我需要实现以下内容:
有一个表 A 应该被另一个表 B 上的触发器的 DML 操作更改。
我想在每次触发器工作时通知 Jboss bean。在最好的情况下,我希望有机会查看 bean 中的 OLD 和 NEW 数据。
最好的方法是什么?你能推荐一些阅读材料吗?
【问题讨论】:
你调查过database change notification吗? 【参考方案1】:Alex 建议使用Database Change Notification 可能是最好的选择。 以下是一些其他选项,用于从 Oracle PL/SQL 包(您可以从触发器调用)向 Java 进程发送事件信号:
使用DBMS_PIPE 向在同一管道上侦听的Java 客户端异步发送消息。 使用DBMS_ALERT 向侦听目标警报的Java 客户端发送消息。在事务提交之前不会收到消息。 使用 UTL_HTTP 或 UTL_SMTP 或 UTL_TCP 将消息发送到侦听目标 HTTP、SMTP 或 TCP 端点的 Java 进程。 向侦听目标队列/主题的 Java 客户端发送 Oracle/AQ JMS 消息。 用 Java 和 load the java classes [和依赖项] 创建一个 JMS 客户端到 Oracle 数据库中。将该类包装在一个 PL/SQL 过程中,并调用它来通知 Java 客户端正在侦听目标队列/主题。在问题 Calling/Using JMS from PL/SQL 中有更多关于从 PL/SQL 发送 JMS 消息的信息。
【讨论】:
这些解决方案的设置和维护都很复杂。除了 JMS 消息外,所有消息都可能丢失。我很惊讶很多人喜欢这个答案! 我可以在触发器中调用一些java方法来查找一个bean并调用它的方法吗? 奥列格;有点。不是很明显,但是 java 方法需要被包装在 PL/SQL 中。这条路有点崎岖,我必须告诉你。问题是它需要加载大量的类来重现远程客户端。但它确实有效。【参考方案2】:您可以让触发器在信号表中插入一行。
然后,JBoss 进程可以监视信号表,定期检查新信号。
【讨论】:
是的,这是一个最简单的解决方案,但如果在许多表上触发,我必须拥有相同数量的信号表,或者通过参数表管理列值以上是关于如何使用 Oracle 触发器通知 JBoss的主要内容,如果未能解决你的问题,请参考以下文章