@Singleton EJB 像这样:
@Singleton
public class MySingleton {
@PersistenceContext
private EntityManager em;
...
@Lock(LockType.READ)
public void doPersistanceAction() {
}
}
因此 MySingleton#doPersistanceAction() 的所有调用者将同时使用 EntityManager 的同一实例。具有附加实体的持久性上下文将在调用者之间共享。由一个调用者启动的事务可能会由另一个调用者提交。 ejb容器是否处理这种情况?
最佳答案
So all callers of MySingleton#doPersistanceAction() would use the same instance of EntityManager simultaneously
是的,但它不是首选并且不是线程安全的。相反,您应该注入(inject) EntityManagerFactory,然后在方法中您可以从中获取 EntityManager。
And persistence context with attached entitys will share between callers
是的,相同的 EntityManager
实例是共享的。
And transaction started by one caller may be commited by another
LockType.READ :用于只读操作。只要没有持有 WRITE 锁,就允许同时访问指定为 READ 的方法。
因此,由于您具有只读操作,因此应该没有关系,但您需要重新审视设计。
Whether the ejb container handle such a situation?
容器将负责单例bean的初始化、注入(inject)、并发等,但你必须正确使用它。
关于java - 带有 PersistenceContext 和 LockType.READ 的单例 ejb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15347479/