2010-03-31 58 views
0

我是在单个的Tomcat服务器上运行,并连接到与Hibernate同一个数据库两个Web应用程序。我担心有两个SessionFactory实例运行可能会导致一些问题。如何跨Web应用程序共享Hibernate SessionFactory?

而且,由于这两个web应用有着许多相同的应用程序逻辑的,我认为它会是一个好主意,集中尽可能多尽我所能。由于我使用Spring进行DI和Hibernate配置,因此只有一个ApplicationContext也是有意义的。

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

回答

1

有可能通过JNDI来分享SessionFactory(理想情况下,你会在你的应用服务器作为JMX服务Hibernate部署)。

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

+0

JNDI是一个想法,但在这一点上可能无法实现。我会更深入地研究它。不过,你的第二点意义重大。谢谢! – Jeremy 2010-04-01 10:57:32

1

我担心,有四处奔波 2种 SessionFactory的情况下可能会导致一些问题。

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

1

可以把创建的会话,并且然而它访问到共享的类加载器(通常是JAR中/共享)应用程序的逻辑 - 必须非常小心,这样做,因为它很容易产生奇怪的例外,除非你”重新熟悉你在做什么。

这也是不可能的,你会看到一个很大的好处这(因为你不必担心同步web应用程序会话状态等),除非你需要跨2种的webapps同步事务 - 在这种情况下,JTA或其他选择可能仍然是更好的解决方案。

+0

同步处理是一个问题,因为应用之一是客户端应用程序的管理应用程序。感谢您的回应。我同意将应用程序放入共享类加载器中可能不是一个好主意。 – Jeremy 2010-04-01 11:00:04

+0

是的,不幸的是,JNDI路由基本上要求与JDBC驱动程序相同。 – jayshao 2010-04-02 21:02:01