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

6
根据我的理解,无状态会话Bean用于编写业务逻辑。它们不能在实例变量中存储数据,因为它们的实例由多个请求共享。因此它们更像单例类。然而,不同之处在于容器为每个请求创建(或从池中重新使用)无状态会话Bean的单独实例。
经过谷歌搜索后,我找到了一个解释,Java EE规范规定它们应该是单线程的。但我不知道为什么它们被指定为单线程
2个回答

5

SLSB是单线程的,因为TX上下文与Principal在调用时与bean实例关联。这些bean被池化,除非达到最大池大小,否则将在单独的线程中处理(供应商相关)。

如果SLSB被设计成线程安全的话,每个调用都会像servlet doGet/Post一样,请求信息包含Tx上下文、安全上下文信息等。因此,至少代码看起来很干净(开发者相关)。


4
无状态会话Bean之所以是单线程的主要原因是为了使它们对容器高度可伸缩。容器可以对运行时环境做出很多简化的假设。第二个原因是为了让开发人员更轻松,因为开发人员不必担心业务逻辑中的任何同步或重入问题,因为Bean永远不会在另一个线程上下文中被调用。
我记得这个理由曾在原始EJB 1.0规范的评论中被讨论过。我会查看规范的目标部分。请参阅http://java.sun.com/products/ejb/docs.html获取规范列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接