Java 如何跨web应用程序共享Hibernate SessionFactory?
我有两个web应用程序,它们运行在一个Tomcat服务器上,并通过Hibernate连接到同一个数据库。我担心运行两个SessionFactory实例可能会导致一些问题 另外,由于两个web应用程序共享许多相同的应用程序逻辑,我认为尽可能地集中是一个好主意。而且,由于我使用Spring进行DI和Hibernate配置,因此使用单个ApplicationContext也是有意义的 我该怎么做这样的事情呢?我是否需要部署一个无头WAR,创建一个ApplicationContext,从而创建一个SessionFactory,并允许每个应用程序访问它?这是个好主意吗 我担心有两个 正在运行的SessionFactory实例 周围可能会引起一些问题 Web应用程序在专用的Java 如何跨web应用程序共享Hibernate SessionFactory?,java,hibernate,spring,orm,Java,Hibernate,Spring,Orm,我有两个web应用程序,它们运行在一个Tomcat服务器上,并通过Hibernate连接到同一个数据库。我担心运行两个SessionFactory实例可能会导致一些问题 另外,由于两个web应用程序共享许多相同的应用程序逻辑,我认为尽可能地集中是一个好主意。而且,由于我使用Spring进行DI和Hibernate配置,因此使用单个ApplicationContext也是有意义的 我该怎么做这样的事情呢?我是否需要部署一个无头WAR,创建一个ApplicationContext,从而创建一个Ses
类加载器中相互屏蔽。所以我不认为冲突会发生,也不会为此烦恼。两个SessionFactory
就可以了
我担心有两个
正在运行的SessionFactory实例
周围可能会引起一些问题
Web应用程序在专用的类加载器中相互屏蔽。所以我不认为冲突会发生,也不会为此烦恼。两个SessionFactory应该可以。您可以将创建会话的应用程序逻辑放入共享类加载器(通常是/shared中的JAR)中,但是,要非常小心,因为除非您熟悉所做的工作,否则很容易生成奇怪的异常
除非您需要跨两个Web应用同步事务,否则您也不太可能从中看到很多好处(因为您必须担心同步Web应用会话状态等),在这种情况下,JTA或其他选项可能仍然是更好的解决方案。您可以将创建会话的应用程序逻辑,并将其访问到一个共享类加载器(通常是/shared中的JAR)中。但是,在这样做时要非常小心,因为除非您熟悉所做的工作,否则很容易生成奇怪的异常
除非您需要跨两个Web应用同步事务,否则您也不太可能从中看到很多好处(因为您必须担心同步Web应用会话状态等),在这种情况下,JTA或其他选项可能仍然是更好的解决方案。可以通过JNDI共享SessionFactory
(理想情况下,您可以将Hibernate作为JMX服务部署在应用服务器中)
但是老实说,拥有2+SessionFactory
实例并不是一个真正需要考虑的问题,也没有什么真正需要担心的。这是一个非常常见的场景,即使对于单个应用程序(在集群环境中)。可以通过JNDI共享SessionFactory
(理想情况下,您可以将Hibernate作为JMX服务部署在应用服务器中)
但老实说,拥有2+SessionFactory
实例并不是一个真正需要考虑的问题,也没有什么真正需要担心的。这是一个非常常见的场景,即使对于单个应用程序(在集群环境中).JNDI是一个想法,但在这一点上可能无法做到。我将进一步研究。您的第二点很有意义。谢谢!JNDI是一个想法,但在这一点上可能无法做到。我将进一步研究。您的第二点很有意义。谢谢!同步是一个问题,因为其中一个应用程序s是客户端应用程序的管理应用程序。感谢您的回复。我同意将应用程序内容放在共享类加载器中可能不是一个好主意。是的,不幸的是,JNDI路由基本上也需要这样做-与JDBC驱动程序相同。同步是一个问题,因为其中一个应用程序是管理应用程序对于客户端应用程序。感谢您的回复。我同意将应用程序内容放在共享类加载器中可能不是一个好主意。是的,不幸的是,JNDI路由基本上也需要这样做-与JDBC驱动程序相同。