首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Java应用服务器中,通过CDI中的@PersistenceContext获得的EntityManager是否是线程安全的?

在Java应用服务器中,通过CDI中的@PersistenceContext获得的EntityManager是否是线程安全的?
EN

Stack Overflow用户
提问于 2018-10-02 01:21:06
回答 1查看 378关注 0票数 2
  • 我知道我自己实例化的EntityManager不是线程安全的。
  • 我知道在EJB中通过EntityManager注入的@PersistenceContext的行为类似于hread-safe,因为EJB容器序列化了对EJB bean的访问。
  • 我知道在EJB注入的D9实际上是一个代理。H210H111我知道当我通过D13将D12注入到D14中并将该bean注入到EJB中时,它的行为就像线程安全,因为它覆盖了EJB (我相信在这种情况下D15也是代理)。

但是:

当我通过@PersistenceContextEntityManager注入到CDI bean中并直接使用这个bean时,例如在Servlet中,会发生什么情况?我认为这个EntityManager是一个代理,那么这个代理能保证线程安全吗?

编辑:类似的问题不能解决我的问题,因为accepted显示的是EJB示例,而不是CDI示例。

编辑:我查看了WildFly应用服务器的源代码,发现WildFly使用了线程安全的代理。此代理在需要时选择实际的EntityManager。在ThreadLocal中,真正的EntityManagers保存在EntityManagers地图的特殊结构堆栈中。

EN

回答 1

Stack Overflow用户

发布于 2018-10-02 21:52:48

https://www.javacodegeeks.com/2013/06/jpa-2-entitymanagers-transactions-and-everything-around-it.html说:

使用事务作用域实体管理器的最大好处是它是无状态的。这也使得事务作用域为EntityManager线程安全,因此实际上无需维护

另外,pro JPA的书中说:

事务范围的实体管理器是无状态的,这意味着它可以安全地存储在任何Java组件

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52595948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档