java - 如何使数据库更改导致 Web 客户端 View 的更新

标签 java mysql jsp jpa comet

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

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

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 数据库添加一个或多个触发器吗?

最佳答案

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

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

window.setInterval(dbCallFunction, x);

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

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

干杯!!

关于java - 如何使数据库更改导致 Web 客户端 View 的更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18414614/

相关文章:

java - Twitter4j FilterQuery language() 方法缺失

java - 宽度和高度匹配问题

java - 更改 getBitmapFromURL

java - 使用 Hibernate 在插入前检查重复值

mysql - 使用 order by 时,数字的长度会影响 mysql 中的性能吗?

java - 通过java锁定在oracle中登录的用户

java - "java.lang.IllegalArgumentException: id cannot be zero"将GAE实体发送到JSP时

java - 如何从 Jsp 页面按钮单击中使用 ServletContextListener 命中 servlet 类

mysql - 创建月份和年份列以加快时间戳查询

php - num_rows 不工作 pdo,mysqli,总是返回 0