Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa EntityManager是通过Java EE应用服务器中CDI中的@PersistenceContext获得的线程安全吗? 我知道自己实例化的EntityManager不是线程安全的 我知道在EJB中通过@PersistenceContext注入的EntityManager的行为类似于线程安全,因为EJB容器序列化了对EJB bean的访问 我知道在EJB中,EntityManager实际上是一个代理 我知道,当我通过@PersistenceContext将EntityManager注入@DependentCDIBean并将该bean注入EJB时,它的行为就像线程安全一样,因为它覆盖了EJB(我相信在这种情况下EntityManager也是代理)_Jpa_Jakarta Ee_Thread Safety_Ejb_Cdi - Fatal编程技术网

Jpa EntityManager是通过Java EE应用服务器中CDI中的@PersistenceContext获得的线程安全吗? 我知道自己实例化的EntityManager不是线程安全的 我知道在EJB中通过@PersistenceContext注入的EntityManager的行为类似于线程安全,因为EJB容器序列化了对EJB bean的访问 我知道在EJB中,EntityManager实际上是一个代理 我知道,当我通过@PersistenceContext将EntityManager注入@DependentCDIBean并将该bean注入EJB时,它的行为就像线程安全一样,因为它覆盖了EJB(我相信在这种情况下EntityManager也是代理)

Jpa EntityManager是通过Java EE应用服务器中CDI中的@PersistenceContext获得的线程安全吗? 我知道自己实例化的EntityManager不是线程安全的 我知道在EJB中通过@PersistenceContext注入的EntityManager的行为类似于线程安全,因为EJB容器序列化了对EJB bean的访问 我知道在EJB中,EntityManager实际上是一个代理 我知道,当我通过@PersistenceContext将EntityManager注入@DependentCDIBean并将该bean注入EJB时,它的行为就像线程安全一样,因为它覆盖了EJB(我相信在这种情况下EntityManager也是代理),jpa,jakarta-ee,thread-safety,ejb,cdi,Jpa,Jakarta Ee,Thread Safety,Ejb,Cdi,但是: 当我通过@PersistenceContext将EntityManager注入CDIBean并直接在Servlet中使用该bean时会发生什么?我相信这个EntityManager是一个代理,那么这个代理能保证线程安全吗 编辑:类似的问题并不能解决我的问题,因为接受的答案显示的是EJB示例,而不是CDI示例 编辑:我检查了WildFly应用服务器的源代码,发现WildFly在CDI中使用了线程安全代理。此代理在需要时选择real EntityManager。Real EntityMa

但是:

  • 当我通过
    @PersistenceContext
    EntityManager
    注入CDIBean并直接在Servlet中使用该bean时会发生什么?我相信这个
    EntityManager
    是一个代理,那么这个代理能保证线程安全吗
编辑:类似的问题并不能解决我的问题,因为接受的答案显示的是EJB示例,而不是CDI示例

编辑:我检查了WildFly应用服务器的源代码,发现WildFly在CDI中使用了线程安全代理。此代理在需要时选择real EntityManager。Real EntityManager保存在特殊的结构中—ThreadLocal中的EntityManager映射堆栈。

表示:

使用事务范围的实体管理器的最大好处是 它是无国籍的。这也使事务范围成为EntityManager 线程安全,因此几乎无需维护

还有一本支持JPA的书说:

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


可能的副本,看看该链接是否有助于您@JGlass,这个链接并不能解决我的问题,因为公认的答案显示的是EJB示例,而不是CDI示例。他们让人觉得不管EJB还是CDI,它都不是线程安全的。关于另一个问题的OP陈述了与您相同的问题-我认为它们只是与EJB相关的示例,而不是CDI,但仍然相关?不,CDI与EJB不同。