代码之家  ›  专栏  ›  技术社区  ›  Jeremy

如何跨Web应用程序共享Hibernate会话工厂?

  •  0
  • Jeremy  · 技术社区  · 14 年前

    我有两个Web应用程序运行在一个Tomcat服务器上,并通过Hibernate连接到同一个数据库。我担心运行两个sessionfactory实例可能会导致一些问题。

    另外,由于两个Web应用程序共享许多相同的应用程序逻辑,我认为尽可能集中化是一个好主意。而且,由于我使用Spring进行DI和Hibernate配置,所以使用单个applicationContext也是有意义的。

    我该怎么做呢?我是否需要部署一个无头的war来创建一个applicationContext,从而创建一个sessionFactory,并允许每个应用程序访问它?这是个好主意吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   Pascal Thivent    14 年前

    可以共享 SessionFactory 通过JNDI(理想情况下,您将在应用服务器中部署Hibernate作为JMX服务)。

    但说实话,有两个+ 实习工厂 实例并不是真正的问题,没有什么值得担心的。这是一个非常常见的场景,即使对于单个应用程序(在集群环境中)。

        2
  •  1
  •   ewernli    14 年前

    我担心有两个 会话工厂实例正在运行 周围可能会引起一些问题。

    Web应用程序通过专用的 ClassLoader . 所以我看不出冲突是如何发生的,也不会为此而烦恼。二 SessionFactory 应该是好的。

        3
  •  1
  •   jayshao    14 年前

    可以 但是,将创建会话的应用程序逻辑放入共享类加载器(通常是jar-in/shared)中,要非常小心,因为除非您熟悉所做的工作,否则很容易生成奇怪的异常。

    你也不太可能从中看到很多好处(因为你必须担心同步webapp会话状态等)。 除非 您需要在两个webapps之间同步事务-在这种情况下,jta或其他选项可能仍然是更好的解决方案。