在 Java EE Web 应用程序项目中,有一个 DAO 注释为 CDI bean:
@RequestScoped
public class CustomerDAO {
@PersistentContext
private EntityManager em;
//some persistence operation afterwards
@Transactional
public void update() {
//implementation using the injected em
}
}
根据 JPA 规范,注入的
EntityManager
不是线程安全的,但问题是:
每个请求将
EntityManager
注入到此 @RequestScoped
CDI bean 是线程安全的吗?如果不是线程安全的,可能会出现哪些潜在的并发问题?
如果您考虑一下,没有任何内容可以跨线程共享,实体管理器被注入请求范围并在请求完成后释放,但如果您对并发有疑问,请使用多版本并发控制。