Jersey、Guice 和 Hibernate - EntityManager 线程安全

2023-12-28

我在我的应用程序中以同样的方式使用了本教程:http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/ http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/

我的应用程序是 JAX-RS Web 服务,它将接收许多并发请求并对数据库进行更新。

GenericDAOImpl.java 实现:

public class GenericDAOImpl<T> implements GenericDAO<T> {

    @Inject
    protected EntityManager entityManager;

    private Class<T> type;

    public GenericDAOImpl(){}

    public GenericDAOImpl(Class<T> type) {
        this.type = type;
    }

    @Override
    public void save(T entity) {
        entityManager.getTransaction().begin();
        entityManager.persist(entity);
        entityManager.getTransaction().commit();
    }

}

如果 2 个并发线程尝试保存实体,我得到

java.lang.IllegalStateException: Transaction already active

如果我评论交易,保存效果很好。

我尝试过使用

@Inject
protected Provider<EntityManager> entityManagerProvider;

or

@Inject
protected EntityManagerFactory entityManagerProvider;

对于每个请求:

EntityManager entityManager = entityManagerProvider.get()

但后来我得到:

org.hibernate.PersistentObjectException: detached entity passed to persist

实现 Guice + Hibernate EntityManager 注入/线程安全通用 DAO 类的正确方法是什么?

UPDATE

安德鲁·雷纳评论http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/ http://www.benmccann.com/hibernate-with-jpa-annotations-and-guice/

“这个逻辑还没有真正准备好投入生产——至少在网络应用程序中使用时是这样。

Hibernate 连接池非常基本,尚未准备好用于生产 - 建议使用数据源池,例如 c3p0。

EntityManager 不应该被重用——它应该根据事务/请求创建。很有可能污染后续请求。

如果出现问题,也不会发生事务回滚。

这是一种有趣的方法,但对于 Web 应用程序来说,使用 Guides 自己的 Persist 扩展模块来管理 EntityManager 实例和事务的生命周期会更安全。”


首先,您使用哪种EntityManager?看看你的代码,我认为这种是应用程序管理的EntityManager。了解不同类型的 EntityManager 对您来说非常重要。

请参见:http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html http://docs.oracle.com/javaee/6/tutorial/doc/bnbqw.html

基于此,需要创建EntityManagerFactory对象,然后创建EntityManager对象。

基本示例:

private static EntityManagerFactory emf; 
EntityManager em = null;

public static EntityManagerFactory getEmf(){
    if(emf == null){
        emf = Persistence.createEntityManagerFactory("nameOfYourPersistenceUnit");
    }
    return emf;
}


em = getEmf().createEntityManager();
em.getTransaction().begin();
em.persist(entity);
em.getTransaction().commit();
em.close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey、Guice 和 Hibernate - EntityManager 线程安全 的相关文章

  • Hibernate SQL 审计日志记录

    我想在 Hibernate 中审计日志生成的 SQL 语句 我编写了扩展 EmptyInterceptor 的自定义拦截器 我覆盖了onPrepare语句方法来获取生成的 SQL 但是当我调试这段代码时 我只得到生成的 SQL 没有像这样的
  • 具有“繁忙”线程的 threadPoolExecutor 如何被终止?

    我的问题有点复杂 让我尝试彻底解释一下 但如果您需要更多详细信息 请随时询问我 我会添加它们 我最近 通过实验 了解到 如果线程连续工作 例如 while true 循环中的整数运算 则中断线程对其没有影响 话题继续进行 就像什么都没发生一
  • 如何使用 Java 本机接口将字节数组传递到以 char* 作为参数的 C 函数中?

    所以我需要使用JNI从java调用C函数 当传入不同的数据类型 创建本机变量 头文件 共享库等等 时 我已经能够成功地做到这一点 但无法让它与字节数组一起使用 这是我的 C 函数 include
  • Java程序验证signtool签名的数字签名

    我已经使用 SignTool 对文件 exe 或 dll 不是 jar 文件 进行了数字签名 Signtool还可以验证数字签名 但我的要求是使用java程序检查由signtool签名的文件的数字签名 我在互联网上搜索但没有找到任何信息 您
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • 如何使用 hibernate 过滤器过滤 hibernate 中的实体

    我需要过滤对象列表中的实体 例如 public class Student private int id private List
  • 使用Keycloak保护Tomcat应用程序时出现HTTP 403禁止错误

    我为这个错误苦苦挣扎了一整天 我一遍又一遍地检查我在tomcat中Keycloak和APP的配置 没有发现错误 下图为测试场景 APP配置 1 Keycloak json是从Keycloak控制台复制的 2 context xml 也正确
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • 如何将选定的项目移动到列表顶部

    List
  • Java GUI,根据actionListener更改面板

    我在两个不同的面板中添加了两个按钮 如果单击第一个按钮 则需要转到下一个面板 其中包含第二个按钮 但是当我单击第一个按钮时 该按钮没有被替换 Java GUI import java awt event ActionEvent import
  • 查找前 N 个五边形数

    我必须找到第一个N pentagonal numbers 1 从 1 100 并每行显示 10 个 我必须使用getPentagonalNumber int n 方法也是如此 显然这就是它存在的原因 到目前为止 这是我的代码 package
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • 测试正确的时区处理

    我们正在处理大量数据 所有数据均以 UTC Java 语言 标记 在读取这些数据 将其存储在数据库中以及再次将其取出之间 发生了一些数据在夏令时期间关闭一小时的情况 由于 UTC 没有夏令时的概念 这显然是软件中的一个错误 一旦知道 就很容
  • 如何更改使用 Google ReCaptcha 版本 2 时的错误消息?

    当为 Google ReCaptcha 版本 2 选择多张照片时 会显示以下错误消息 需要多个正确的解决方案 请解决更多 如何将错误消息更改为我网站上的自定义消息 这是图像 我认为不可能在服务器端 在谷歌 进行 这可以在客户端通过利用 js
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 使用 spring mvc 的多个域

    假设我有一个应用程序必须缩短 URL 但还要执行其他操作 喜欢google com and goo gl or facebook com and fb me 部署两个应用程序很容易 但 目前 仅部署一个应用程序更简单 使用 spring 和
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • 找不到 `activityViewModels()` Hilt Android

    我在我的项目中使用 Hilt 和 MVVM 我想要一个viewModel from activityViewModel在 2 个活动中使用相同的内容 但我的 Android Studio 说未解析的参考 我的应用程序 build gradl
  • 尝试 Catch 性能 Java

    当捕获异常而不是进行检查时 try catch 需要多长时间 以纳秒为单位 假设消息具有用于查找的 HashMap 类型性能 try timestamp message getLongField MessageField TIMESTAMP
  • Mac 上的 JavaFX WebView 字体问题

    有些网站显示乱码而不是正确的文本 它只发生在 Mac 上 For example with GMapsFX 可能与 OS X 10 11 或 10 12 有关 我用Java 1 8 0 121测试了它 此问题有任何修复或解决方法吗 就我而言

随机推荐

  • (MongoDB) 在同一管道中结合并集和交集

    我在最新版本的 mongoDB 和 pymongo 中运行以下聚合管道 project union setUnion query a query b unwind union group id union ID date a addToSe
  • 如何在 Google 表格中创建“反向数据透视表”?

    我正在尝试生成一个 反向枢轴 功能 我一直在努力寻找这样的功能 但找不到已经存在的功能 我有一个汇总表 其中最多有 20 列和数百行 但是我想将其转换为平面列表 以便我可以导入到数据库 甚至使用平面数据来创建更多数据透视表 所以 我有这种格
  • 单独的环境配置elastic beanstalk

    我正在弹性豆茎中创建一个具有网络层和工作层的 Rails 应用程序 使用 ebextensions 内的 ELB 设置启动 Web 环境是正常的 但我无法启动工作环境 因为它没有 ELB 有没有办法为每个环境分离 ebextensions
  • C# 将字符串转换为双精度/十进制并返回字符串,保留尾随零,为千位添加逗号

    我试图获取用户输入 解析它 然后使用 String Format 显示 用逗号格式化数千个 So if user provides 1000 I will display 1 000 1000 00 gt 1 000 00 1000 0 g
  • 设置稀疏矩阵多个值的快速方法

    我在 MATLAB 中有一个稀疏的 5018x5018 矩阵 其中大约有 100k 个值设置为 1 即大约 99 6 为空 我正在尝试将大约 5 的 0 翻转为 1 即大约 125 万个条目 我想要翻转的矩阵中有 x 和 y 索引 这是我所
  • 仅服务器端插件

    我有一个不想让客户端看到的插件 不幸的是 它总是为服务器和客户端构建的 如何防止这种情况发生
  • 标记问题中的 AppSettings

    我试图将其放入我的标记中 但由于某种原因 这不被接受 我在这里做错了什么 要求是我不使用辅助方法 但在标记中使用表达式构建器 根据文档 http msdn microsoft com en us library d5bd1tad aspx
  • 当 MethodHandle 更快时,为什么要使用反射来访问类成员?

    随着 Java 7 的发布 MethodHandle https docs oracle com javase 8 docs api java lang invoke MethodHandle html 它允许用户像使用其底层字节码一样调用
  • 如何使用数据列表使用 FIND_IN_SET

    我用过FIND IN SET之前曾多次发生过 但这次的情况有点不同 早些时候我在表中搜索单个值 例如 SELECT FROM tbl name where find in set 1212121212 sku 但现在我有我想要在表中搜索的
  • 用 C 加密纯文本文件

    我目前正在用 C 语言编写一个从配置文件读取的 Linux 应用程序 该配置文件包含一些我想要加密的数据 因此它不是纯文本 我花了几个小时研究这个问题 但还没有找到可行的解决方案 由于应用程序需要从配置中读取 我需要能够动态对其进行加密和解
  • Doctrine2 同一实体上的两个存储库

    我不知道如何清楚地解释我的问题 但我会尝试 我有一个包含两个模块的项目 Admin User 我还有两个教义实体给我带来了一些麻烦 Shop Products 我的问题是这些实体必须由管理员和用户模块使用 但原则是 一个实体 一个存储库 据
  • 在我的例子中,如何本地化一个简单的 HTML 网站页面?

    I am NOT开发任何包含以下内容的 Web 服务应用程序client侧面和后端server端 如 Java EE 应用程序或 Ruby on Rails 相反 我只是开发一个 HTML网站页面 在此页面上 有两个国旗图像 美国和中国 用
  • 无法根据 WSO2 API Manager 中的消息中介策略调用动态端点/URL

    我正在使用 APIM 3 1 0 我需要根据标头或请求参数重定向 API 我尝试过请求参数但无法调用不同的API 我已使用以下自定义中介策略并将其添加到测试 API 但无法调用不同的 URL 每次调用 API 时 即使我将操作值作为菜单传递
  • Fancybox 在 IE 中加载 iframe 时卡住

    我在使用 fancybox 的 IE 中的 iframe 中加载 PDF 时遇到问题 当我点击链接时 我会得到 gif 加载程序 并且它会永远旋转 控制台或页面或类似内容中没有错误 所有版本的 IE 都会出现此问题 所有其他浏览器都工作正常
  • 保持用户界面最新的最佳方法是什么?

    这个问题是我的问题的改进观察数据变化的不同方式 https stackoverflow com questions 3161392 different ways of observing data changes 我的 C 应用程序中仍然有
  • 如何隐藏ng网格中的列

    这是我的代码 索引 html
  • 配置 WiX 自动设置产品版本属性?

    目前 每当我构建包时 我都必须手动增加 P roduct wxs 文件中的 Version 属性 如下所示
  • 如何找到 JavaScript 数组中包含的最大数字?

    我有一个简单的 JavaScript 数组对象 其中包含一些数字 267 306 108 有没有一个函数可以找到这个数组中最大的数字 辞职来救援 http ejohn org blog fast javascript maxmin Arra
  • 在网站中存储用户上传的文件的最佳方式是什么?

    我正在尝试创建一个网站 需要在其中存储一些用户上传的文件 如一些个人资料图片 一些 xml 文件等 那么存储这些文件的最佳方式是什么 目前 我正在服务器上为每个注册的新用户创建一个新目录 并将每个用户的文件存储在各自的目录中 但有人告诉我这
  • Jersey、Guice 和 Hibernate - EntityManager 线程安全

    我在我的应用程序中以同样的方式使用了本教程 http www benmccann com hibernate with jpa annotations and guice http www benmccann com hibernate w