1

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

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

示例任务列表视图

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

4

2 回答 2

1

You need to implement a polling model here. On GUI implement a script that should make a server call every n seconds bring the latest data and show it on GUI, obviously on server side you need code that can bring data and generate response.

To implement polling you can set a function to be invoked after x time.

window.setInterval(dbCallFunction, x);

Once function invokes, make a server call, return results, you can set again function interval.

There are lot of javascript libraries that can solve this for you, I would recommend using JQuery, here is the link

Cheers !!

于 2013-08-24T04:28:53.680 回答
1

轮询无法扩展。

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

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

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

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

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

于 2013-08-24T20:52:27.040 回答