从服务器更新Vaadin7容器-是否使用服务器推送

从服务器更新Vaadin7容器-是否使用服务器推送,vaadin,vaadin7,Vaadin,Vaadin7,我想实现Vaadin服务器推送,以便将服务器数据库上的更改推送给用户。例如,如果用户A保存到服务器DB,那么用户B应该在其UI上自动看到更改 然而,瓦丁书指出: SQLContainer不断地检查中的行数 连接的数据库表,以检测外部添加或 删除行。默认情况下,假定表行数保持不变 有效期为10秒。此值可以从代码中更改;具有 SQLContainer中的setSizeValidMissels() 那么,这是否意味着我不需要为服务器数据库更改实现服务器推送 SQLContainer还会检查行更新吗 我

我想实现Vaadin服务器推送,以便将服务器数据库上的更改推送给用户。例如,如果用户A保存到服务器DB,那么用户B应该在其UI上自动看到更改

然而,瓦丁书指出:

SQLContainer不断地检查中的行数 连接的数据库表,以检测外部添加或 删除行。默认情况下,假定表行数保持不变 有效期为10秒。此值可以从代码中更改;具有 SQLContainer中的setSizeValidMissels()

那么,这是否意味着我不需要为服务器数据库更改实现服务器推送

SQLContainer还会检查行更新吗


我认为服务器推送的原因是将数据更改推送给用户?

不,它只检查行数。您可以在SQLContainer的
size()
updateCount()
方法的源代码中看到这一点。通过推送将每个DB更改推送给用户不是一种常见做法,因为它不能很好地扩展。通过使用refresh插件,您可以放置一个refresh按钮来更新容器的数据或定期轮询DB的更改。()

我尝试过使用refresher插件,但是是否有一种通用的方法来刷新我的容器和使用它们的UI元素?我有一个带有容器的视图类,但我不想从UI类以静态方式访问它们@mithridasI不确定我是否理解您的需求,但是刷新容器的一般方法是使用按钮触发容器上的刷新。另一方面,如果用户操作导致容器使用的数据发生更改(例如将记录保存到DB表中),则可以在用户操作时触发容器刷新。另一种方法是使用
ScheduledExecutorService
来安排一个定期任务,该任务检查后台线程中的新数据。找到后,该后台线程调用
UI.access
方法来更新Vaadin widgets.FYI,
SQLContainer
已从Vaadin 8及更高版本中删除。有人建议使用MyBatis、jOOQ或Querydsl等Java库作为替代方法。