问题描述
嗨,
我们有一个从UI填充的表。要求是,每次新添加都必须根据添加到外部服务器的值进行webservice调用。
在这种情况下,我们以前的方法是编写一个java线程来轮询表并在没有更多记录的情况下休眠一段时间。
轮询器将数据放在JMS队列中,MDB从该队列中拾取数据并进行webservice调用。
表中维护状态列,该列确定记录的状态 (新的,由轮询器选择的,成功的web服务调用等)。
当然,当没有新数据时,这会导致CPU周期被浪费。
其他可能的方法似乎是使用高级队列或DBMS_alerts,但在所有这些情况下,将需要触发器,这似乎是不鼓励的。
关于最佳方法有什么建议吗?
我们有一个从UI填充的表。要求是,每次新添加都必须根据添加到外部服务器的值进行webservice调用。
在这种情况下,我们以前的方法是编写一个java线程来轮询表并在没有更多记录的情况下休眠一段时间。
轮询器将数据放在JMS队列中,MDB从该队列中拾取数据并进行webservice调用。
表中维护状态列,该列确定记录的状态 (新的,由轮询器选择的,成功的web服务调用等)。
当然,当没有新数据时,这会导致CPU周期被浪费。
其他可能的方法似乎是使用高级队列或DBMS_alerts,但在所有这些情况下,将需要触发器,这似乎是不鼓励的。
关于最佳方法有什么建议吗?
专家解答
好吧。你不必使用触发器来使用高级排队。您可以在您的应用程序中调用它,作为添加数据的交易的一部分。
如果由于某些原因您无法执行此操作,则可以查看连续查询通知。有了这个,你的应用程序向数据库注册一个表或查询。然后,当表/查询发生更改时,数据库将通知应用程序。
因此,它不必轮询数据库,而是将更改推送到应用程序。
在以下位置阅读:
https://docs.oracle.com/database/121/ADFNS/adfns_cqn.htm#ADFNS018
如果由于某些原因您无法执行此操作,则可以查看连续查询通知。有了这个,你的应用程序向数据库注册一个表或查询。然后,当表/查询发生更改时,数据库将通知应用程序。
因此,它不必轮询数据库,而是将更改推送到应用程序。
在以下位置阅读:
https://docs.oracle.com/database/121/ADFNS/adfns_cqn.htm#ADFNS018
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




