【问题标题】:How to make database change cause updates to web clients' views如何使数据库更改导致 Web 客户端视图的更新
【发布时间】:2013-08-27 04:48:59
【问题描述】:

环境:Linux 上的 Java EE 7、Glassfish 4、MySQL 5.7,在具有 512MB 内存的 ARM7 服务器上(应用程序必须节省内存!) 应用程序:一个数据库驱动的 Java Web 应用程序,服务于多个使用默认浏览器运行 Android 4.0 的 Android 平板电脑客户端。

客户端将有两种基本用户类型:生产者和消费者。生产者生成显示在消费者浏览器上的任务。当生产者创建一个新任务时,如果他们的任务列表 (viewTaskList.jsp) 显示为“PENDING”状态,它应该立即显示在所有登录消费者的浏览器上。消费者从任务列表中选择任务并处理它们(doTask.jsp)。当消费者选择任务时,它应该在所有其他任务列表显示上标记为“正在工作”并且不可选择。如果打开任务的消费者单击取消按钮,则所有任务列表上的任务状态应更改为“待处理”。当一个任务完成时,它会被标记为这样,并且应该从任何显示任务列表视图的消费者浏览器中消失。

Sample TaskList view

Task entity class: (fragment)

public class Task {
   private int taskId;
   private String taskDescription;
   private boolean isComplete;
   private String completerId; // the userId of the Consumer who marked this as Complete (foreign key);
   private boolean isLocked;
   private String lockId;  // the userId of a Consumer who has this task open;

   .
   .
   .
}

我正在学习Java EE编程,还没有精通JPA和JSF,但了解基本概念。从我在这里和其他地方看到的情况来看,我认为 Comet 和/或 JQuery/AJAX 可以帮助我解决这个问题,但我不知道如何使用其中任何一个。我需要有关如何让数据库更新导致消费者显示发生更改的基本指导,而无需消费者请求更改。解决方案的一部分是否向 MySQL 数据库添加一个或多个触发器?

【问题讨论】:

    标签: java mysql jsp jpa comet


    【解决方案1】:

    您需要在这里实现一个轮询模型。在 GUI 上实现一个脚本,该脚本应该每 n 秒调用一次服务器,带来最新的数据并将其显示在 GUI 上,显然在服务器端,您需要可以带来数据并生成响应的代码。

    要实现轮询,您可以设置要在 x 时间后调用的函数。

    window.setInterval(dbCallFunction, x);
    

    一旦函数调用,进行服务器调用,返回结果,你可以再次设置函数间隔。

    有很多javascript库可以为你解决这个问题,我推荐使用JQuery,这里是link

    干杯!!

    【讨论】:

      【解决方案2】:

      轮询无法扩展。

      使用WebSocket(带有旧版浏览器的后备)。

      您可以尝试自己设置,但它是 PITA。

      您可以使用像 Pusher 这样的 WebSocket 服务。

      基本上,您设置了一个客户端订阅的 WebSocket 通道。他们订阅。当您想要通知他们时,您可以在服务器上调用 notify 方法,然后将其发送给所有客户端。

      您可以在 Java 中执行此操作,甚至可以直接在 Postgres 等数据库中使用其 NOTIFY 函数执行此操作。

      【讨论】:

        猜你喜欢
        • 2018-04-05
        • 2020-01-04
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多