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