【问题标题】:Share one set of read-only Table data across many users/sessions/UIs in Vaadin在 Vaadin 中的多个用户/会话/UI 之间共享一组只读表数据
【发布时间】: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


    【解决方案1】:

    共享容器的问题在于容器不是无状态的。如果一个用户对容器进行排序或过滤,它将同时对所有其他用户的容器(和表)进行排序或过滤。因此不建议采用这种方法。

    如果您禁用共享容器的组件的排序和过滤,它应该或多或少地按照您描述的方式工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-08
      • 2021-09-13
      • 2016-02-23
      • 2021-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多