我有两个Web应用程序在一个Tomcat服务器上运行,并通过Hibernate连接到同一个数据库。我担心运行两个SessionFactory实例可能会导致一些问题。
此外,由于两个Web应用程序共享大部分相同的应用程序逻辑,我认为尽可能多地集中化是一个好主意。由于我使用Spring进行DI和Hibernate配置,因此也可以使用单个ApplicationContext。
我将如何做这样的事情?我是否需要部署一个无头WAR来创建一个ApplicationContext,从而创建一个SessionFactory并允许每个应用程序访问它?这甚至是个好主意吗?
答案 0 :(得分:1)
我担心有两个 SessionFactory实例正在运行 周围可能会引起一些问题。
Web应用程序在专用ClassLoader
中彼此屏蔽。因此,我不知道冲突会如何发生,并且根本不会为此烦恼。两个SessionFactory
应该没问题。
答案 1 :(得分:1)
您可以放置创建Sessions的应用程序逻辑,并将其访问到共享类加载器(通常是/ shared中的JAR)但是 - 要非常小心这样做,因为它很容易生成奇数例外,除非你熟悉你正在做的事情。
你也不太可能看到很多好处(因为你不得不担心同步webapp会话状态等)除非你需要跨2个webapps同步交易 - 在在哪种情况下,JTA或其他选项可能仍然是更好的解决方案。
答案 2 :(得分:1)
可以通过JNDI共享SessionFactory
(理想情况下,您可以在应用程序服务器中将Hibernate部署为JMX服务)。
但老实说,拥有2 + SessionFactory
个实例并不是真正的问题,没有什么可以担心的。这是一种非常常见的情况,即使对于单个应用程序(在集群环境中)也是如此。