@Singleton这样的EJB:
@Singleton
public class MySingleton {
@PersistenceContext
private EntityManager em;
...
@Lock(LockType.READ)
public void doPersistanceAction() {
}
}
因此,MySingleton#doPersistanceAction()的所有调用者将同时使用相同的EntityManager实例。附加实体的持久化上下文将在调用者之间共享。由一个调用者启动的事务可能由另一个调用者提交。 ejb容器是否处理这种情况?
答案 0 :(得分:1)
所以MySingleton#doPersistanceAction()的所有调用者都会使用相同的 EntityManager的实例同时
是的,但不是首选&不是线程安全的。相反,你应该注入EntityManagerFactory
&然后在方法中,您可以从中获取EntityManager
。
与附加实体的持久化上下文将在之间共享 呼叫者
是的,共享EntityManager
个实例。
由一个调用者启动的事务可能会被另一个调用者提交
LockType.READ:用于只读操作。只要没有保持WRITE锁,就允许同时访问指定为READ的方法。
因此,由于您具有只读操作,因此无关紧要,但您需要重新设计。
ejb容器是否处理了这种情况?
Container将负责singleton bean的初始化,注入,并发等,但你必须正确使用它。