我将 JPA 与Guice Persist用于我的 GAE 项目,将Restlet用于 REST 接口。在引擎盖下,好的旧Hibernate提供了 JPA 服务。
这就像一个魅力,Guice 将必要的 JPA 部分注入到我的类中,EntityManager
例如RestletServlet
;
现在我想使用 aSessionInterceptor
将创建/编辑时间戳和当前活动用户插入到我的实体中。在旧项目中,我使用HibernateUtil
带有 ThreadLocal 变量的静态类来存储会话。在我的新项目中,我想用 Guice 解决这个问题。Guice 需要EntityManager
在 my中注入一个,SessionInterceptor
这样我就可以从数据库中加载当前的活动用户。
需要在SessionInterceptor
Hibernate 上下文中创建,并且不允许在启动后对其进行配置。因此我创建了一个SessionInterceptorFactory
使用 Guice Injector 的。在persistence.xml
这行得通(是的,它很丑),我有一个SessionInterceptor
Guice Injection。
但是当我尝试这段代码时;
[错误] 1) 没有绑定 javax.persistence.EntityManager 的实现。[错误] 在定位 com.google.inject.Provider 时 [错误]
为 com.ludus.server.hibernate.SessionInterceptor.(SessionInterceptor.java:20) 的第一个参数 [错误] 在定位 com.ludus.server.hibernate 时。会话拦截器
我需要将bound
JPA(Hibernate)配置与SessionInterceptor
Guice 中的()连接起来,就像我对RestletServlet
.
谁能帮我解决这个 Guice 配置?
除此之外,当前SessionInterceptorFactory
是“肮脏的 Guice hack”,是否有干净的 Guice 解决方案?