当前位置: 首页 > 知识库问答 >
问题:

在Quarkus的ApplicationScoped bean中注入entitymanager如何安全?

萧萧迟
2023-03-14

在quarkus示例中,我看到ApplicationScoped bean用作带有EntityManager注入的服务类。
据我所知(JEE)EntityManager不是线程安全的,ApplicationScoped bean也不是。如果我们将实体管理器注入ApplicationScoped bean中,看起来我们在请求之间共享同一个实体管理器。
如果ApplicationScoped bean是线程安全的,那么我们只能同时接受一个请求。我不明白为什么我们在EntityManager注入中使用ApplicationScoped而不是RequestScoped bean。

共有1个答案

郭鸿信
2023-03-14

正如您所看到的,Quarkus和其他使用JPA构造的项目一样,在幕后做了很多工作,以确保您作为最终用户接收到的上下文引用能够安全和正确地运行。

(免责声明:我不是Quarkus专家,但是这种将EntityManager操作委托给不同的底层EntityManager委托的特定模式取决于事务状态、与同步相关的和其他关注点,这种模式在之前的应用服务器上也很常见。)

注入所谓的“容器管理的”EntityManager以人们直觉上期望的方式运行是相当棘手的。作为这方面的最终用户,您应该小心:实际上,从EntityManagerFactory#createEntityManager()接收的EntityManager不是线程安全的。但这不是注入这些槽的东西。例如,以这种方式注入的EntityManager将执行其他令人兴奋的事情,如自动参与JTA事务,这些事务本质上是特定于html" target="_blank">线程的,因此必须执行某种程度的线程安全--等等。显然,这里发生的不仅仅是应用程序管理的EntityManager的简单注入。

要点是:applicationscopedbean接收的EntityManager引用是以线程安全的方式提供的。

 类似资料:
  • 问题内容: Spring 是否可以在不扩展的情况下将JPA 对象注入到我的DAO类中?如果是,在这种情况下,Spring是否管理事务? 我试图使我的Spring配置尽可能简单: 问题答案: 是的,尽管它充满了陷阱,但由于JPA有点特殊。在代码中没有显式的Spring依赖关系的情况下,非常值得阅读有关注入JPA 和的文档: http://static.springsource.org/spring/

  • 我想在Quarkus中注入bean一个静态编程语言字段。示例文件看起来像 构造函数参数注入工作正常,但字段仍处于未初始化状态。 控制台输出: 有可能在科特林的Quarkus中使用CDI场注入吗?如果是,需要为注射设置什么才能工作? 我是从uberjar运行应用程序,而不是从本地图像运行。 jar包含生成的类org.example.InjectDemo_Bean包含一个方法的分解版本,该方法不显示任

  • 问题内容: 我的战争包含以下内容: persistence.xml: web.xml: 我的TestServlet类如下: package com.test.service; 调用get()方法时,我得到一个NullPointerException; 尚未注入EntityManager。关于我可能缺少的或如何诊断的任何建议?服务器日志中几乎没有。 我确定我在没有jboss-web.xml或web.

  • 我正在使用JavaSE7开发一个桌面应用程序。应用程序使用多个线程,在创建的每个线程中,都会注入一个DAO类来访问我的数据库。作为持久层,我使用EclipseLink和JPA。EntityManager是使用构造函数注入注入注入到我的DAO类中的,因为它不是线程安全的,所以我使用了如下验证程序: 然而,相同的EntityManager实例被注入到每个DAO中。为了进行设置,我使用了由guice提供

  • 问题内容: 我已经创建了自己的服务,并且需要注入原则EntityManager,但是我没有看到在我的服务上被调用,并且注入不起作用。 这是代码和配置: 这是我的包 我已经将.yml导入了我的应用中 当我在控制器中致电服务时 我得到一个对象(不为null),但是在UserService中为null,正如我已经提到的,从未调用过UserService上的构造函数 还有一件事,Controller和Us

  • 我已经创建了自己的服务,需要注入doctrine EntityManager,但我看不到在我的服务上调用了,注入也不起作用。 以下是代码和配置: 这是我的包中的 我已经导入了. yml在在我的应用程序中 当我在控制器中调用服务时 我得到一个对象(不是null),但是

  • 如何使用Spring JPA注入EntityManager对象 我使用的是spring上下文 我的dao是,注入EntityManager 我的persistence.xml 所以我收到以下错误: