我有一个 jsf 视图,它显示了来自表中托管 bean(视图范围)的一些数据,这些数据是远程检索的。
目前,数据是通过使用 primefaces 轮询组件从客户端视图轮询来更新的。
这还不够,因为有太多流量被发送到客户端,而且现在 primefaces 支持服务器推送,我只想重新加载数据并将其推送到客户端视图(如果数据已更改)。
这应该通过从 Web 层轮询到应用程序层调用类似hasChanged(...)
. 如果数据发生更改,Web 层会向客户端推送通知以重新加载数据。
当前客户投票
客户端>>网络层>>应用层
客户端通过 ajax 向 web 层请求数据,再次向应用层请求数据并更新视图
希望网络层投票和推送
客户端<<网络层>>应用层
网络层轮询应用层数据是否已更改并代表重新加载并通知(推送)客户端更新视图
方法:
在 web 层的托管 bean 上实现轮询的最佳方法是什么?
- 托管 bean 中的 TimerTask 在
JSF 托管 bean 中生成线程,用于使用计时器的计划任务 - 带有 Schedule 注释的附加 EJB
- 带有 TimerService 的附加 EJB
- 其他?
编辑:
架构:(3层)
- Server1:数据库
- Server2:应用层(EAR 与远程 EJB + Hibernate)
- Server3:网络层(使用 JSF 2.0 + Primefaces 3.4 的 WAR)
- 客户端:浏览器