【发布时间】:2012-12-02 21:09:50
【问题描述】:
用 CDI 做这样的事情安全吗?
@Named
@ApplicationScoped
public class DAO {
@PersistenceContext
private EntityManager entityManager;
}
我了解EntityManager 本身不是线程安全的,因此不应在像@ApplicationScoped 这样的共享全局上下文中使用。但是,由于带有@PersistenceContext 的注入对象实际上是一个围绕底层EntityManager 的线程感知包装器,这样可以吗?
我看过其他关于该主题的帖子,但无法为这个特定案例找出权威答案。例如:
Java CDI @PersistenceContext and thread safety
例如,与 @Stateless 一起使用似乎是安全的 - 但我不确定这是因为 @Stateless 的工作方式,还是因为 @PersistenceContext 本身的某些内在因素。
编辑
我困惑的根源是@PersistenceContext 注入的EntityManager 包装器似乎知道当前线程,以便确定是否已经有一个事务在进行中。所以也许我把线程意识和线程安全混淆了,它们是两个不同的东西。
【问题讨论】:
标签: jakarta-ee jpa java-ee-6 cdi