用Guice / GuicePersist注入Hibernate拦截器

我正在使用JPA和Guice Persist作为我的GAE项目,Restlet作为REST接口。 在良好的旧Hibernate提供JPA服务。

在这里输入图像描述在这里输入图像描述

这就像一个魅力,Guice将必要的JPA部分插入到我的类中,例如RestletServletEntityManager ;

在这里输入图像描述

现在我想使用SessionInterceptor将创建/编辑时间戳和当前活动用户插入到我的实体中。 在旧的项目中,我使用了带有ThreadLocal变量的静态HibernateUtil类来存储会话。 在我的新项目中,我想用Guice解决这个问题。 Guice需要在我的SessionInterceptor注入一个EntityManager ,这样我就可以从数据库加载当前的活动用户。

SessionInterceptor需要在Hibernate上下文中创建,不允许在启动后对其进行配置。 因此我创建了一个使用Guice Injector的SessionInterceptorFactory 。 在persistence.xml

在这里输入图像描述

在这里输入图像描述

这工作(是它的丑陋),我有一个与Guice注入SessionInterceptor

在这里输入图像描述

但是当我尝试这个代码;

在这里输入图像描述

[错误] 1)未绑定javax.persistence.EntityManager的实现。 查找com.google.inject.Provider [错误]时出现[错误]
com.ludus.server.hibernate.SessionInterceptor的第一个参数(SessionInterceptor.java:20)[ERROR]查找com.ludus.server.hibernate.SessionInterceptor时

我需要连接( bound )JPA(Hibernate)配置与Guice中的SessionInterceptor ,就像我使用RestletServlet ,但是如何实现?

谁可以用这个Guice配置来帮助我?

除此之外,当前的SessionInterceptorFactory是一个'肮脏的Guice黑客',有没有一个干净的Guice解决方案呢?


问题在于你在SessionInterceptorFactory创建了一个全新的(并且是空的)注入器,当你想要做的就是把它挂到你在其他地方的主注入器中。

当试图将Guice集成到依赖注入之前的工具时,这是一个相当常见的问题:如果配置只给你提供“工厂类”而不是接受实例的选项,那么你别无选择,只能通过通过一个静态变量引用。 你可以通过使用线程本地来实现这个功能,但这不是很令人满意。

然而,在Hibernate的情况下,您可以通过使用API​​来构建SessionFactory而不是使用配置文件来清理它。 您可以在构建SessionFactoryConfiguration对象上调用setInterceptor方法。 您目前尚未显示您是如何创建此项目的。

链接地址: http://www.djcxy.com/p/94653.html

上一篇: Inject a Hibernate Interceptor with Guice / GuicePersist

下一篇: Inject Configuration in Guice AbstractModule in Dropwizard Application