【发布时间】:2015-05-16 20:34:44
【问题描述】:
我是 EJB 和休眠的新手,以下内容让我感到困惑,因为每当我寻找明确的答案时似乎都会出现矛盾。 问题:
通过以下方式将Entity manager直接注入到无状态bean中是否线程安全?
@Stateless
public class SomeBean implements SomeInterface {
//..
@Inject
private EntityManager entityManager;
//... non related transaction1()
//... non related transaction2()
每个无状态 bean 是否有自己的 EntityManager 实例或可以注入共享实例?
根据 Hibernate 文档:
EntityManager 是一个廉价的、非线程安全的对象,应该为单个业务流程、单个工作单元使用一次,然后丢弃。
EJB 容器是否使其成为线程安全的?
根据 EJB 文档,无状态会话 bean 本质上是线程安全的,不允许不同的客户端同时操作同一个 bean。
但是,我已经阅读了应该注入 EntityManagerFactory 而不是 EntityManager 的示例,如果直接注入 EntityManager,则应该在 Stateful bean 中完成。
始终将 EJB 直接注入到无状态 bean 中是否安全,如上所示,或者当它不起作用时会有什么用例?
【问题讨论】:
标签: multithreading hibernate jakarta-ee ejb