2013-08-24 75 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函數。

相關問題