【问题标题】:Dependency problems upgrading Guice with Warp-Persist使用 Warp-Persist 升级 Guice 的依赖问题
【发布时间】:2015-02-27 01:54:55
【问题描述】:

我们有一个使用带有 warp-servlet 和 warp-persist 的 Guice 1.0 的应用程序,我们想升级到 Guice 2 或 3。但是,我们遇到了一个复杂的依赖关系网络。

有没有人知道一种简单的方法(尽可能接近直接替换)让 warp-persist 与较新的 Guice 一起工作,或者让 Guice-persist 与直接的 Hibernate 一起工作?

  • Warp-persist 需要 warp-servlet
  • warp-servlet 和 warp-persist 仅支持 Guice 1.0
  • Guice-persist 似乎是 warp-persist 的替代品,但它只支持 JPA,而我们直接使用 Hibernate(有大量基于标准的代码,这使得移植到 JPA 变得不简单)。
  • Guice-persist 还声称有一种支持非 JPA 数据访问的方法,但似乎没有任何相关文档。
  • Warp-persist 似乎不支持 Hibernate 4,因此我们也无法升级 Hibernate。

【问题讨论】:

    标签: hibernate dependencies guice guice-servlet guice-persist


    【解决方案1】:

    您可以从 JPA 实体管理器访问休眠会话。这允许您使用 migrate away from warp。

    @Singleton
    public class SessionProvider implements Provider<Session> {
    
        /** The entity manger to retrieve the session from. */
        @Inject
        private Provider<EntityManager> entityManagerProvider;
    
        /**
        * @return the Hibernate session, being the delegate of the entity manager provided by the injected entity manager provider.
        */
        @Override
        public Session get() {
            final Session session = (Session) entityManagerProvider.get().getDelegate();
            return session;
        }
    }
    

    您需要做的就是将 Hibernate 配置为您的 JPA 实现。 我也建议使用 onami persist。 Guice persist 似乎被抛弃了。

    【讨论】:

    • 这几乎可行!我们只是遇到了 SessionPerRequestFilter 的问题,它抱怨 UnitOfWork 必须是“REQUEST”。我们正在设置它,但现在我们正在调用 PersistenceService.usingJpa() 而不是 usingHibernate()
    • 更新:我们所要做的就是从 Hibernate SessionPerRequestFilter 更改为 JPA 。它现在正在工作:)
    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2020-04-17
    • 2021-05-22
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多