2013-08-26 39 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小部件。 –