Jersey + HK2 + Grizzly:注入EntityManager的正确方法?

2023-11-22

我已经成功地在 Jersey、HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入(到资源类中)。 (基本上遵循这个例子.)

我现在很好奇将 JPA EntityManager 注入我的资源类中最好的方法是什么? (我目前正在考虑将一个请求作为一个工作单元)。我目前正在探索的一个选择是使用Factory<EntityManager>通过以下方式:

class MyEntityManagerFactory implements Factory<EntityManager> {

    EntityManagerFactory emf;

    public MyEntityManagerFactory() {
        emf = Persistence.createEntityManagerFactory("manager1");
    }

    @Override
    public void dispose(EntityManager em) {
        em.close();
    }

    @Override
    public EntityManager provide() {
        return emf.createEntityManager();
    }

}

并按如下方式绑定:

bindFactory(new MyEntityManagerFactory())
        .to(EntityManager.class)
        .in(RequestScoped.class);

问题是dispose- 方法从未被调用。

我的问题:

  1. 这是在 Jersey+HK2 中注入 EntityManager 的正确方法吗?
  2. 如果是这样,我应该如何确保我的 EntityManager 正确关闭?

(我宁愿不依赖重量级容器或额外的依赖注入库来覆盖这个用例。)


代替Factory<T>.dispose(T),用注射剂注册CloseableService可能会做大部分你想做的事。 ACloseable需要适配器。CloseableService closes()退出请求范围时的所有注册资源。

class MyEntityManagerFactory implements Factory<EntityManager> {
    private final CloseableService closeableService;
    EntityManagerFactory emf;

    @Inject
    public MyEntityManagerFactory(CloseableService closeableService) {
        this.closeableService = checkNotNull(closeableService);
        emf = Persistence.createEntityManagerFactory("manager1");
    }

    @Override
    public void dispose(EntityManager em) {
        em.close();
    }

    @Override
    public EntityManager provide() {
        final EntityManager em = emf.createEntityManager();
        closeableService.add(new Closeable() {
            public final void close() {
                em.close();
            }
        });
        return em;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jersey + HK2 + Grizzly:注入EntityManager的正确方法? 的相关文章

随机推荐

  • 我可以从 scala 中的重载方法中获取函数吗?

    假设我定义了两个具有相同名称和返回值但参数不同的方法 def overload x Int x toString def overload s String s 现在我想将其中之一转换为函数 如果该方法没有重载 我会这样做 val f ov
  • 继承自 ObservableCollection 的集合 - 有什么好处?

    看完之后这篇 MSDN 文章 我现在想知道将集合定义为继承自的类有什么好处 如果有的话 ObservableCollection 这之间是否有任何显着差异 class MyCollection ObservableCollection
  • 使用基于 $resource 的服务进行部分更新(又名 PATCH)?

    我们正在使用 Django TastyPie 作为后端 REST 服务提供者构建一个 Web 应用程序 并构建一个基于 AngularJS 的前端 使用大量基于 resource 的服务来对服务器上的 CRUD 对象进行处理 到目前为止一切
  • XSLT 1.0 三元 if 的惯用语?

    该 Java 程序使用三元 if 将布尔值映射到输出字符串 表示 true 空字符串表示 false public class ternary public static void main String args boolean flag
  • Java Socket - 本地端口

    我正在学习 Java 的套接字编程 我使用以下语句连接到网站 s new Socket www nba com 80 当我调试应用程序并查看 s 的内容时 我看到 Socket addr www nba com 2 21 246 97 po
  • 多模块 m2eclipse/WTP 项目能否将实用程序模块部署到 WEB-INF/类中?

    我们目前使用 MyEclipse 及其内置 Maven4MyEclipse 集成和内置 J2EE 服务器支持 但希望转换为常规 Eclipse 特别是 Helios 以便能够在 Windows 上使用其 64 位安装 MyEclipse 尚
  • Swift 4 UICollectionView 检测滚动结束

    我有一个Horizontal UICollectionView在我的应用程序上 当用户在左侧拖动时到达 UICollectionView 的末尾 或接近末尾 时 我想加载更多数据 我正在使用 Swift 4 我找到了一些 Swift 3 解
  • C# 中的 Powershell 命令

    我正在尝试查询 root CIMV2 命名空间中所有 WMI 类的名称 有没有办法使用 powershell 命令在 C 中检索此信息 沿着基思的方法 using System using System Management Automat
  • 为什么我的安装项目无法执行我的自定义注册过程

    我正在尝试为我使用 Visual Studio 2008 用 C 编写的类库驱动程序编写一个安装项目 安装程序 该驱动程序项目有一段代码如下所示 ComRegisterFunction public static void Register
  • Zend_Form 在模型视图控制器范式中适合什么位置

    The Zend框架主要用于 MVC 使用 非常有用的组件之一是Zend Form 我在寻找 Zend Form 的位置时遇到了一些麻烦 它是视图 模型还是控制器的一部分 我应该赋予它哪些职责 事实是 Zend Form 做了两件事 装饰和
  • Git:有没有办法找出提交是从哪里挑选出来的?

    如果我从多个分支中进行挑选 是否有一种简单的方法可以找出提交来自哪里 例如原始提交的 sha Example 在主分支 从开发分支挑选提交 A A 在 master 分支变成 D Before B master Feature Y C de
  • PMD 插件因 Java 14 失败:不支持的 targetJdk

    我正在尝试将带有 PMD 插件的 pom xml 文件集成到构建阶段 PMD版本3 13 0 甲骨文JDK 14
  • XML 和 ASP:检索并解析远程文件

    我正在启用 ASP 的 Windows Server 上构建一个网站 我需要从另一台服务器检索 XML 文档并返回该文档中的值 xml 文件很小 只有一个带有文本值的节点 我只需要返回该文本值 我以前从未使用过 ASP 谷歌搜索让我找到了一
  • 何时使用桥接模式以及它与适配器模式有何不同?

    有没有人用过桥纹在现实世界的应用程序中 如果有 你是如何使用它的 是我 还是只是适配器模式加入一点依赖注入 它真的值得拥有自己的模式吗 有一个组合费德里科的 and John s答案 When Shape Rectangle Circle
  • 地理位置:仅移动谷歌地图标记而不重新加载地图

    我只需要在设备移动或设备变得更加准确时更新标记 当位置改变时也会重新加载地图 我只需要移动制造商 我有以下代码 if navigator geolocation navigator geolocation watchPosition fun
  • jQuery 3D 轮播?

    有人看过像这样的 jQuery 3D 轮播教程吗 http web enavu com demos 3dcarouselwip 没有给出来源 但想知道是否有人有关于如何连续圈定 DIV 并调整其大小的提示 它看起来不是真正的 3D 但会根据
  • 在R中调用特定的列名

    colnames 为我提供了整个数据框的列名称 有没有办法获取一个指定列的名称 在 ggplot 中绘制数据时 我需要这个来命名标签 所以说我的数据是这样的 df1 lt data frame a sample 1 50 10 b samp
  • 关于注释的自定义 Eclipse 警告

    假设我有一个内部方法 它应该只在某些情况下使用 在 Eclipse 中 是否有可能将其标记为内部并在使用时显示警告 以防止我或使用我的 API 的人在不知道自己在做什么的情况下错误地使用它 我无法更改它的可见性 因为它也可能在其他包 非扩展
  • 如何使用 SSIS 从平面文件中删除重复行?

    首先我要说的是 能够从平面文件中获取 1700 万条记录 推送到远程机器上的数据库并花费 7 分钟 这真是太神奇了 SSIS 确实太棒了 但现在我已经有了这些数据 如何删除重复项呢 更好的是 我想获取平面文件 从平面文件中删除重复项 然后将
  • Jersey + HK2 + Grizzly:注入EntityManager的正确方法?

    我已经成功地在 Jersey HK2 和一个普通的 GrizzlyServer 中设置了我自己的服务类的注入 到资源类中 基本上遵循这个例子 我现在很好奇将 JPA EntityManager 注入我的资源类中最好的方法是什么 我目前正在考