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