用 CDI 做这样的事情安全吗?
@Named
@ApplicationScoped
public class DAO {
@PersistenceContext
private EntityManager entityManager;
}
我知道它EntityManager本身不是线程安全的,因此不应在共享的全局上下文中使用,例如@ApplicationScoped. 但是,由于注入的对象@PersistenceContext实际上是一个围绕底层的线程感知包装器EntityManager,这样可以吗?
我已经看过有关该主题的其他帖子,但无法为这个特定案例找出权威答案。例如:
Java CDI @PersistenceContext 和线程安全
例如,使用 with 看起来是安全的@Stateless- 但我不确定这是因为它的工作方式@Stateless,还是因为它@PersistenceContext本身固有的东西。
编辑
我困惑的根源是@PersistenceContext注入的EntityManager包装器似乎知道当前线程,以便确定是否已经有一个事务正在进行中。所以也许我把线程意识和线程安全混淆了,它们是两个不同的东西。