为什么要池化无状态Bean?

3

通常我们在业务/dao层使用单例实例。在EJB中,为什么要对无状态会话bean进行池化处理?


请参阅相关问题:https://dev59.com/aHVC5IYBdhLWcg3w9GLM - Joel
2个回答

3
“无状态”在名称中的含义是会话对话状态,即在bean调用之间保留的状态,持续会话期间。然而,无状态会话Bean仍然允许具有实例变量。这些实例变量不应与对话状态相关,而是在客户端之间共享。
换句话说,无状态会话Bean不能保证线程安全。
因此,容器应确保一次只有一个线程在执行给定的无状态会话Bean实例,从而需要一个池。

3
我认为实例变量在调用之间会保留它们的值 - 实例只是存活在池中。它们可用于缓存非会话资源。赞同Session Beans明确不是线程安全的,并且当按照EJB编程模型使用时,容器确保一个线程/请求同时由一个实例服务。 - djna
3
请注意,变量是否仍具有该值并不保证,因此不要依赖它。在bean方法调用之间的任何时刻,容器可能确实将bean从可用bean池中抛出并销毁它。 - Pascal Thivent

2
  • 因为它们建造成本昂贵,通常需要访问外部资源,如数据库、消息队列等。
  • 因为您不希望创建无限数量的容器,否则您将耗尽资源。
  • 以便容器可以为您管理线程安全。

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