看来 jboss 管理和提供的实体管理器实例是绑定(bind)到持久性上下文的实际实现的代理。
此实际实现收集了 JTA 事务提供的隔离(每个事务上下文)。
这让我觉得在处理代理实例时我不需要担心并发问题。
如果我决定从 JNDI 查找而不是容器注入(inject)中获取该代理实例,也许我什至可以缓存它?
这样合理吗?
最佳答案
容器负责扫描@PersistenceContext
注释并注入(inject)EntityManagers
。它可以代理EntityManager
的实例。
在 EJB 中,容器负责依赖注入(inject),您可以确保线程安全。持久化上下文将在同一事务中的多个组件之间共享。
但是,如果您在 Servlet 环境(需要考虑并发性)中使用 @PersistenceContext
注入(inject)此 EntityManager
,则您不会线程安全。您应该使用 @PersistenceUnit
来代替。这部分可以引用JBoss 7 JPA Reference Guide :
Keep in mind that the entity manager is not expected to be thread safe (don't inject it into a servlet class variable which is visible to multiple threads).
前一段时间,我总结了我对 JTA 事务之间的持久性上下文共享和容器代理 EntityManagers
的了解,并将其发布 here 。我希望您会发现它很有用。
关于jakarta-ee - jboss 是否为我处理托管实体管理器并发问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8603478/