2013-08-24 24 views
1

环境:Linux上的Java EE 7,Glassfish 4,MySQL 5.7和512MB RAM的ARM7服务器(应用程序必须节省内存!) 应用程序:数据库驱动使用默认浏览器向运行Android 4.0的多个Android平板电脑客户端提供Java Web应用程序。如何更改数据库会导致更新Web客户端的视图

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

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

回答

1

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

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

window.setInterval(dbCallFunction, x); 

函数调用一次,调用服务器,返回结果,可以重新设置函数的时间间隔。

有大量的JavaScript库,可以解决这个问题对你来说,我会建议使用JQuery,这里是link

干杯!

1

轮询不会缩放。

使用WebSocket(与旧版浏览器的回退)。

你可以尝试自己设置它,但它是一个PITA。

您可以使用Pusher等WebSocket服务。

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

你可以用Java来做到这一点,甚至可以直接在像Postgres这样的数据库中使用它们的NOTIFY函数。

相关问题