【问题标题】:Why should we make a SessionScoped ManagedBean thread safe in JSF?为什么我们要让 JSF 中的 SessionScoped ManagedBean 线程安全?
【发布时间】:2011-05-15 17:54:20
【问题描述】:

我知道 Application-Scope 跨多个用户持续存在,因此很明显我们应该确保所有 ApplicationScoped ManagedBeans 都是线程安全的。

我也明白我们不需要关心 RequestScoped ManagedBean 的线程安全。那是因为它只持续一个 HTTP 请求,如果被引用,它会为每个请求重新实例化。

但我不太清楚为什么我们应该担心 SessionScoped ManangedBean 的线程安全。即使它在多个请求中持续存在,但每个单独的用户都会获得他/她自己的实例,对吗?

那么,为什么在 SessionScoped ManagedBeand 的情况下我们需要担心线程安全,这是否也适用于 ViewScoped ManagedBean? ViewScope 在同一视图的 2 个连续请求中持续存在,对吗?

【问题讨论】:

    标签: jsf thread-safety managed-bean session-scope


    【解决方案1】:

    如果您已经担心某个范围内的数据的线程安全性,那么数据很可能属于更窄的范围(即高级设计存在缺陷)。如果数据被放在正确的范围内,那么完全没有理由担心线程安全。我假设您的 bean 的设计方式正确,它们不会在 getters 中执行任何业务逻辑。

    将应用范围用于应用范围的数据/常量,例如对每个人都相同的下拉列表。将会话范围用于客户端特定数据,例如登录用户和用户首选项(语言等)。将视图范围用于支持 ajax 的丰富动态视图(基于 ajax 的验证、渲染等)。将请求范围用于简单和非 ajax 表单/演示文稿。

    【讨论】:

    • 我正在阅读 Oracle 的 JavaEE6 教程,其中说在使用 ApplicationScoped 和 SessionScoped 托管 bean 时,应注意线程安全,我想知道在什么意义上?但是,现在很清楚了。很好的解释。谢谢。
    猜你喜欢
    • 2015-01-10
    • 2012-02-07
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-04
    • 2014-02-25
    相关资源
    最近更新 更多