【发布时间】:2014-08-13 04:53:23
【问题描述】:
我有一组只读数据在多个用户会话的相同布局实例中显示为表格。我不想为每个用户复制数据,而是希望在我的Vaadin 服务器上的内存中只有一个数据实例。
我的数据是简单的JavaBean 对象,在List 中,在BeanItemContainer 中包装。
➤ 在单个 BeanItemContainer 中创建单个 List(数据 bean),然后将一个 BeanItemContainer 实例指定为许多 UI 实例中的多个 Table 实例的支持 Container 是否安全且适当?
以下是我每分钟更新数据的计划。我认为没有办法通过 Vaadin 服务器请求活动布局列表,所以我将构建自己的弱集合。
- 每个布局都通过同步的静态类方法注册自己。
- 将已注册布局列表存储在并发弱集中。
(垃圾收集布局从集合中消失,因此无需取消注册。) - Vaadin 服务器上的单线程/执行程序:
- 检测来自数据源的新数据。
- 构建一个新的 BeanItemContainer,
- 浏览已注册布局的列表。在每个 Layout 上,使用 Push,调用 Vaadin
access方法以发送线程安全消息,告诉 Layout 将其 Table 的旧 Container 切换为新 Container。
(当最后一个 Layout 替换旧 Container 时,旧 Container 可用于垃圾回收。)
这种方法不是线程安全的吗?也许我应该创建一个 JavaBean 数据对象的并发列表,共享给所有布局,其中每个布局都创建自己的 BeanItemContainer 包装单个并发列表?
【问题讨论】:
标签: java multithreading concurrency vaadin vaadin7