环境:Linux 上的 Java EE 7、Glassfish 4、MySQL 5.7,配备 512MB 内存的 ARM7 服务器(应用程序必须节省内存!) 应用程序:一个数据库驱动的 Java Web 应用程序,服务于使用默认浏览器运行 Android 4.0 的多个 Android 平板电脑客户端。
客户端将有两种基本用户类型:生产者和消费者。生产者生成显示在消费者浏览器上的任务。当生产者创建新任务时,如果任务列表 (viewTaskList.jsp) 显示为“待定”状态,则它应该立即显示在所有已登录的消费者的浏览器上。消费者从 TaskList 中选择任务并处理它们 (doTask.jsp)。当消费者选择任务时,它应该在所有其他任务列表显示上标记为“正在工作”并且不可选择。如果已打开任务的消费者单击取消按钮,则所有任务列表上的任务状态都应更改为“待定”。当一个任务完成时,它被标记为这样,并且应该从任何显示 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/