繁体   English   中英

会话范围的支持bean是否必须实现线程安全?

[英]Does a session-scoped backing bean have to be implemented thread-safe?

是否有可能同时由多个线程访问会话范围的辅助bean?

servlet规范说,有可能:

执行请求线程的多个servlet可以同时具有对同一会话对象的活动访问权。 容器必须确保以线程安全的方式执行表示会话属性的内部数据结构的操作。 开发人员负责线程安全访问属性对象本身。 这将保护HttpSession对象内的属性集合免于并发访问,从而消除了应用程序导致该集合损坏的机会。

但是我不能让服务器(JBoss)为同一个会话使用不同的线程。 当我打开多个选项卡并在一个选项卡中启动长时间运行的请求,然后在另一个选项卡中启动请求时,第二个选项卡必须等待响应,直到在第一个选项卡中启动的操作完成。

我还通过在支持bean中使用断点阻止线程来验证这一点。 在我恢复线程之前,无法在同一会话的其他选项卡中执行任何操作。

尽管如此,我们在生产日志中有一些奇怪的例外,到目前为止我们唯一可能的解释是,多个线程同时访问同一个会话范围的辅助bean。

是的, A Servlet session is thread safe 但是,如果你在会话中放置可变对象。 应用程序应该处理同步。

在你的情况下, if your Bean is Mutable ie, has state. Yes it has to be thread safe. if your Bean is Mutable ie, has state. Yes it has to be thread safe.

关于您的测试用例,它取决于您使用的浏览器。 大多数浏览器为每台服务器并行支持最多6个并行连接。 但是,如果有cookie,不确定他们是否使用并行连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM