2011-01-10 93 views
2

我正在开发一个JSF 1.2项目,它的页面上有AJAX功能(使用RichFaces)。我们应该关注JSF托管bean的线程安全吗?

我的bean建立了一个要编辑的对象列表,然后有支持编辑的方法,而这个bean是会话范围的。我将使用a4j:队列,以便一次只能发生一次AJAX呼叫。

我很好奇在托管bean中使用同步(锁定对象,还是从java.util.concurrent集合)。实现同步/线程安全所需的额外工作是否真的需要?我正在使用的站点有许多用户,需要可靠,但它拥有大量的托管bean,我很好奇我应该如何关心托管bean的线程安全。

请问为支持线程安全而采取额外的步骤来支持bean?

在此先感谢。

回答

1

a4j:当AJAX调用正在进行时,队列不会阻止用户重新加载页面/单击另一个链接。

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

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

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

+0

由于这个事实,我在应用程序中发现了一个错误。从ajax和submit或其他功能对支持bean的调用是同步的,因此它们可能会产生并发问题 – 2016-04-13 17:03:30

1

您需要记住范围。

请求范围 - 线程安全的,会话范围 - 不是线程安全

如果您需要能够打开多个浏览器窗口或标签,那么你可以使用像一个Seam对话从编辑同一个对象,以保护从两个窗口/选项卡。

0

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