2013-08-26 64 views
1

我想實現Vaadin服務器推送,以便將服務器數據庫上的更改推送給用戶。例如,如果用戶A保存到服務器數據庫,則用戶B應該在他的用戶界面上自動查看更改。從服務器Vaadin7容器更新 - 要使用服務器推送或不

然而,Vaadin書指出:

的SQLContainer不斷連續地檢查行的量 連接的數據庫表中,爲了檢測外部添加或去除 行。默認情況下,假設表格行數保持 有效10秒。這個值可以從代碼中改變;與SQLContainer中的 setSizeValidMilliSeconds()。

那麼這是否意味着我不需要實現服務器推動服務器數據庫更改?

SQLContainer是否也檢查行更新?

我相信服務器推送的原因是將數據更改推送給用戶?

+0

僅供參考,「SQLContainer」已從Vaadin 8及之後版本中刪除。一些人建議使用Java庫,如MyBatis,jOOQ或Querydsl作爲替代方法。 –

回答

3

不,它只檢查行數。您可以在SQLContainer的源代碼size()updateCount()方法中看到。通過推送將每個數據庫更改推送給用戶不是常見做法,因爲它不能很好地擴展。您可以使用刷新按鈕來更新容器的數據,或者使用刷新器插件定期輪詢數據庫以進行更改。 (https://vaadin.com/directory#addon/refresher

+0

我已經嘗試使用刷新添加,但有沒有一種通用的方法來刷新我的容器和使用它們的用戶界面元素?我有一個容器視圖類,但我不想從UI類以靜態方式訪問它們。 @mithridas – Santiago

+0

我不確定我是否理解您的需求,但刷新容器的一般方法是使用按鈕觸發容器上的刷新。另一方面,如果用戶操作導致容器用來更改的數據(例如將記錄保存到數據庫表),則可能會觸發容器在用戶操作時刷新。 – emre

+0

另一種方法是使用'ScheduledExecutorService'來安排在後臺線程中檢查新數據的循環任務。找到後,該後臺線程會調用'UI.access'方法來更新Vaadin小部件。 –