如果我已正确通知,则每个XPage请求都会在Domino服务器上的JVM中的新线程中处理。
因此,存储在applicationScope
中的所有对象(可能由不同用户同时修改)应该线程安全。但是,到目前为止我读过的所有关于线程安全的文章都没有说明在sessionScope
中使用线程安全对象的必要性。
例如,用户可以同时在两个不同的浏览器选项卡中运行相同的XPage(它会修改sessionScope
对象)。
在我看来,sessionScope对象也必须是线程安全的,或者我出错了什么?
答案 0 :(得分:1)
通常,只要有多个线程试图访问同一个对象,并且至少有一个线程试图修改对象的状态,它就需要是线程安全的。
因此,在这种情况下,如果两个浏览器选项卡尝试访问相同的xpage或不同的xpages但尝试访问同一个会话范围对象,并且至少其中一个尝试修改该对象,我们需要确保它是线程安全的。
正如@Tiny对视图范围bean的评论,“根据JSF规范,AJAX requests made from the same view are queued on the client side. Therefore, the possibility of concurrent access in a view scoped bean is zero.
视图范围bean不在同一浏览器的不同选项卡/窗口之间共享”。
请参阅jsf 2.0规范的Section 13.3.2。