我是一名新手,对EJB和Hibernate不太熟悉,以下内容让我感到困惑,因为每当我搜索确定的答案时似乎都存在矛盾。
问题:
按照以下方式直接向无状态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是安全的,还是什么情况下不能工作?
EntityManager
方法,那么是的。 - BalusC@PersistenceContext
也会注入一个代理。 - BalusC