如何跨Web应用程序共享Hibernate SessionFactory?

时间:2010-03-31 23:54:27

标签: java hibernate spring orm

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

此外,由于两个Web应用程序共享大部分相同的应用程序逻辑,我认为尽可能多地集中化是一个好主意。由于我使用Spring进行DI和Hibernate配置,因此也可以使用单个ApplicationContext。

我将如何做这样的事情?我是否需要部署一个无头WAR来创建一个ApplicationContext,从而创建一个SessionFactory并允许每个应用程序访问它?这甚至是个好主意吗?

3 个答案:

答案 0 :(得分:1)

  

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

Web应用程序在专用ClassLoader中彼此屏蔽。因此,我不知道冲突会如何发生,并且根本不会为此烦恼。两个SessionFactory应该没问题。

答案 1 :(得分:1)

可以放置创建Sessions的应用程序逻辑,并将其访问到共享类加载器(通常是/ shared中的JAR)但是 - 要非常小心这样做,因为它很容易生成奇数例外,除非你熟悉你正在做的事情。

你也不太可能看到很多好处(因为你不得不担心同步webapp会话状态等)除非你需要跨2个webapps同步交易 - 在在哪种情况下,JTA或其他选项可能仍然是更好的解决方案。

答案 2 :(得分:1)

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

但老实说,拥有2 + SessionFactory个实例并不是真正的问题,没有什么可以担心的。这是一种非常常见的情况,即使对于单个应用程序(在集群环境中)也是如此。