任何人都可以帮助我从并发角度理解JSF托管bean作用域吗?
我的理解:
一旦我在会话范围内有一个bean,这意味着:只有一个用户可以访问这个托管bean,因此不可能发生并发。
此外,一旦我在请求范围中使用bean,那么一旦请求启动就会创建此bean 一旦响应返回,该bean将被删除。 (每个客户端都有这个bean的不同副本)
此外,一旦我在非范围内使用bean,那么一旦用户调用bean,它就会被创建,在完成调用之后,bean将被删除。
但是,一旦我在应用程序范围内有一个bean,这意味着多个客户端可以访问这个bean,所以 如果我有关键数据,则必须通过同步保护它。
我们非常感谢您的所有投入。
答案 0 :(得分:4)
我认为您对每个示波器寿命的理解都很好。
但是,我认为您对何时应用同步的理解并不好。每当需要在某个范围内同步bean的方法时,这通常表明bean的范围对于它所拥有的数据而言太宽。然后,您应该将bean放在更窄的范围内,或者将数据移动到更窄范围内的另一个bean中,这样就不需要同步。
您应该将请求范围数据(表示数据,同步表单数据等)放在请求范围中。您应该在视图范围中放置视图范围数据(异步表单数据,rendered
属性条件,“隐藏”值等)。您应该将会话作用域数据(登录用户,用户首选项,用户特定数据等)放在会话范围中。您应该将应用程序作用域数据(全局下拉列表值,配置设置等)放在应用程序范围内。