我想在 Application Scoped Bean 中保存文件系统结构,因为这对所有客户端都有效。每个客户端都可以读取这个 bean。
但是数据必须每天刷新 4 次,因为文件系统可能会改变。
是否可以为此用例使用应用程序范围的 bean,或者刷新数据时是否存在线程安全问题?什么是替代方法?辛格尔顿?
我想在 Application Scoped Bean 中保存文件系统结构,因为这对所有客户端都有效。每个客户端都可以读取这个 bean。
但是数据必须每天刷新 4 次,因为文件系统可能会改变。
是否可以为此用例使用应用程序范围的 bean,或者刷新数据时是否存在线程安全问题?什么是替代方法?辛格尔顿?
JSF 或 CDI 范围内的注释将为您做的就是控制对象的生命周期。即,当它第一次被引用时,bean 将被实例化,并执行任何注入或 postconstruct 方法。在 ApplicationScoped 的情况下,它还将确保只生成对象的一个副本(当然,除非您明确创建一个)。
因此,话虽如此,您的类的实例与非容器管理的实例没有什么不同,因为它与线程安全有关。因此,如果您更改对象的属性,而其他一些线程假设它们是一致的,您将遇到问题。IMO 这是同步访问的问题。任何需要是原子的并且对对象具有一致视图的操作都应该使用某种形式的排他锁。
JavaBeans 规范的一些支持 -
2.8多线程 Java Beans 应该假设它们在多线程环境中运行,并且几个不同的线程可能同时传递事件和/或调用方法和/或设置属性。每个 java bean 开发人员都有责任确保他们的 bean 在多线程访问下正常运行。对于简单的 bean,这通常可以通过简单地使所有方法“同步”来处理</p>