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

泽西+HK2+灰熊:注入EntityManager的正确方式?

姚晋
2023-03-14

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

我现在很好奇将JPA 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);
    null

(我不想仅仅为了覆盖这个用例而依赖于重量级容器或额外的依赖注入库。)

共有1个答案

商绍元
2023-03-14

Factory .Dispose(T) 中注册可注入的CloseableService可以完成您想要的大部分工作,而不是Factory .Dispose(T) 。需要可关闭适配器CloseableService在退出请求范围时关闭()所有注册的资源。

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;
    }
}
 类似资料:
  • 我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并

  • 我在使用泽西岛设计REST微服务时遇到了一个捕获22问题。我正在尝试创建一个带有嵌入式灰熊服务器的应用程序,以降低部署复杂性。因此,我有一个创建灰熊服务器的主要方法。我需要在服务器的引导过程之前注入一些对象。 我的主要内容如下: 如何获取ServiceLocator单例实例,以便注入我的应用程序对象? 我尝试过: 然而,我需要将所有的< code>AbstractBinder绑定到它两次(因为我已

  • 我正在使用quickstart原型构建一个Jersey Moxy服务。我的代码运行良好,我可以得到一些JSON返回。然而,在我开发的过程中,如果我犯了一个错误,比如说请求处理程序有一个不支持的类型,我将得到一个空的500响应,这使得调试变得困难。例如,如果我用@XmlElementRef错误地修饰了一个属性,我将得到如下响应: 服务器将表现得好像什么都没发生一样: 我尝试使用日志配置文件: 这产生

  • 问题内容: 我已经花了几个小时来解决这个问题,但仍然没有弄清楚将JPA与JSF一起使用的正确方法。 我有一个会话范围的托管bean,它可以完成很多事情,其中​​之一是保留一些实体对象。在开始时,我创建了一个生产者方法,该方法以请求为范围,用于构建EntityManager对象。无论如何,将请求的范围内的bean注入到会话范围内的bean的读操作已经完成了将该实例包装到Instance对象中。做完了

  • 这是我为我的HTTPServer编写的内容: 任何帮助都将不胜感激。

  • 我试图在Jersey测试类中注入一个由HK2工厂服务提供的对象,但得到未满足的依赖项异常。 MultiException有3个异常。它们是: org.glassfish.hk2.api.unsatifiedDependencyException:在SystemInjecteeImpl(requiredtype=closeableService,parent=TestFactory,qualifie