【问题标题】:Java Desktop application using dbms_alert使用 dbms_alert 的 Java 桌面应用程序
【发布时间】:2023-03-28 22:02:01
【问题描述】:

我想创建一个小型 Java 桌面应用程序,当它在 oracle 数据库中找到新记录时显示通知。

我不希望所有桌面客户端都运行查询,所以我想我会创建一个运行查询并让所有其他进程知道何时显示通知的主进程。

我仅限于 Oracle 9i,因此无法使用更改通知。 AskTom 说 dbms_alert 是 Oracle 9i 的一个很好的替代方案。

所以从我现在的想法来看,我将编写一个 sqlplus 脚本以通过 crontab 运行,该脚本将定期运行查询,然后发出 dbms_alert。

对于我的桌面应用程序,我有点困惑。 dbms_alert 有 waitany 和 waittone 等方法。这是否意味着我的桌面应用程序需要保持与数据库的实时活动会话打开,以便它们接收 dbms_alerts?

我不能让我的桌面应用程序定期连接到数据库并接收尚未接收到的任何警报吗?

谢谢

【问题讨论】:

  • Ajax 使用 http 作为它的协议。必须有一个服务器监听请求,所以除非您想在每个客户端上运行一个 Web 服务器,否则 Ajax 不是正确的方法。此外,PL/SQL 没有我知道的用于发出 Web 请求或任何其他基于套接字的请求的工具。您可以编写一个服务器来轮询 Oracle 的新行,并将通知推送到通过套接字连接到它的客户端。那么你只有一个进程通过轮询访问 Oracle。
  • 不确定 http 方法是否合适。我不确定您是否根本不希望应用程序与数据库通信,或者您是否只想避免轮询;如果是后者,您可以查看更改通知或讨论的其他选项here
  • 感谢大家的反馈。我今天查看了更改通知,但由于我正在运行 Oracle 9i,所以这不是一个选项。 AskTom 曾表示,对于 9i 版,dbms_alert 可以用作更改通知的替代方法。我可能会更改我原来的问题,以询问有关 dbms_alert 的架构相关问题

标签: java oracle plsql


【解决方案1】:

我会创建一个执行查询的数据库作业。此外,我将创建一个维护表,在其中留下通知,包括。如果找到新记录的时间戳。每个(Java)客户端都有自己的维护表上次查询的时间戳,因此如果找到新的记录,则会注册。但是你要保证每个客户端都在特定的时间段内对维护表进行查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2018-01-16
    相关资源
    最近更新 更多