1

在一个 JSF 应用程序中,我有一个会话范围的 bean,它具有多个网页的各种 getter 和 setter,当访问者单击“提交”按钮时,页面中输入的值被发送到输出文件,以便稍后与另一个应用程序处理.

我希望跟踪特定日期数据写入文件的次数,尽管我最终可能会使用数据库,但我希望将计数器存储在所有访问该文件的人都会更新的地方页。我的理解是,如果我将它作为静态 int 存储在托管 bean 中,则该值将不会保留在不同的会话中。我有一个非 bean 类,它存储一些实用方法,例如处理日期,我的问题是,非 bean 类是否会存储一个可以从任何会话访问的静态变量,并用于跟踪信息,比如计算提交?

非常感谢您的回复。

4

2 回答 2

0

我的理解是,如果我将它作为静态 int 存储在托管 bean 中,则该值将不会保留在不同的会话中。

这是不正确的。静态变量是应用程序范围的。它们不依赖于实例,而是依赖于类。一个类在应用程序的生命周期中只加载一次。你自己也可以通过一个相当简单的实验来解决这个问题。

您唯一关心的可能是线程安全。使用AtomicIntegerorAtomicLong代替,int这样您就不会在增量期间冒竞争条件的风险。

也可以看看:

于 2013-02-05T11:42:38.303 回答
0

只要您不重新启动服务器,任何静态字段都将实现您的目标,即使是会话范围内托管 bean 中的那个。静态变量属于类,而不是实例,并且托管 bean 的类仅由 JVM 加载一次。由于您可能会从多个线程访问该静态变量,因此您需要在修改其值时进行同步。

于 2013-02-05T11:43:03.397 回答