我们应该如何关注JSF托管bean的线程安全性?

时间:2011-01-10 17:53:00

标签: multithreading jsf java-ee synchronization richfaces

我正在开发一个JSF 1.2项目,该项目的页面上有AJAX功能(使用RichFaces)。

我的bean构建了一个要编辑的对象列表,然后有方法支持编辑,bean是会话范围的。我将使用a4j:队列,这样一次只能进行一次AJAX调用。

我很好奇在托管bean中使用同步(锁定对象,或者来自java.util.concurrent的集合)是否明智。真正需要实现同步/线程安全所需的额外工作吗?我正在开发的网站有很多用户,需要可靠,但它有很多托管bean,我很好奇我应该关注托管bean整体的线程安全性。

提前致谢。

3 个答案:

答案 0 :(得分:1)

a4j:队列不会阻止用户在AJAX调用过程中重新加载页面/单击另一个链接。

是的,我们可能会相信用户不会一个接一个地点击许多不同的链接,但是不是由用户触发的请求,例如a4j:poll?

请注意,用其线程安全的等效项替换所有集合可能不足以使应用程序线程安全。

也就是说,根据您的应用程序需要满足的可靠程度,这个问题可能会或可能不会引起您的注意。

答案 1 :(得分:1)

您需要牢记范围。

请求范围 - 线程安全,会话范围 - 非线程安全

如果您需要能够打开多个浏览器窗口或选项卡,那么您可以使用类似Seam对话的内容来防止从两个窗口/选项卡编辑同一对象。

答案 2 :(得分:0)

如果是SessionScope d,则必须注意使用某些线程安全机制。如果是RequestScope d或ViewScope,那么在方法之间共享类变量是安全的。