繁体   English   中英

为什么无状态会话bean是单线程的?

[英]Why stateless session beans are single threaded?

根据我的理解,无状态会话bean用于编写业务逻辑。 它们无法在实例变量中存储数据,因为它们的实例由多个请求共享。 所以他们似乎更像是单身人士课程。 但是,区别在于包含为每个请求创建(或从池中重用)无状态会话Bean的单独实例。

谷歌搜索后,我可以找到Java EE规范说他们认为是单线程的原因。 但我无法理解为什么指定为单线程

由于TX Context,SLSB是单线程的,Principal在调用时与bean实例相关联。 这些bean是合并的,除非达到最大池大小在单独的线程中处理(依赖于供应商)。

如果SLSB设计为线程安全,则每个调用看起来都像servlet doGet / Post,其请求信息包含Tx上下文,安全上下文信息等。因此,至少代码看起来很干净(取决于开发人员)。

无状态会话bean是单线程的主要原因是使它们对容器具有高度可伸缩性。 容器可以对运行时环境做出许多简化的假设。 第二个原因是让开发人员的生活更轻松,因为开发人员不必担心他的业务逻辑中的任何同步或重新进入,因为bean永远不会在另一个线程上下文中调用。

我记得原始EJB 1.0规范的评论中讨论的原因。 我会看一下规范的目标部分。 有关规范列表,请参见http://java.sun.com/products/ejb/docs.html

暂无
暂无

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

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