Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多个Tomcat实例上共享Hibernate_Java_Hibernate_Tomcat_Multiple Instances - Fatal编程技术网

Java 在多个Tomcat实例上共享Hibernate

Java 在多个Tomcat实例上共享Hibernate,java,hibernate,tomcat,multiple-instances,Java,Hibernate,Tomcat,Multiple Instances,我有4个web应用程序,它们有一个对Hibernate实现的通用引用,但运行在不同的Tomcat实例上。因此,例如,在Hibernate中配置的最小大小为3(使用c3p0)的连接池在所有项目运行时将导致12连接打开(每个实例3个) 我想与实例“共享”Hibernate实现(因此总是打开3个连接,而不是12个),我想知道实现它的最佳解决方案 有什么建议吗 谢谢你,你做不到。每个Tomcat实例都在自己的JVM中运行,所以您不能在它们之间共享对象或类 你为什么不喜欢12分贝的连接?现代数据库系统能够

我有4个web应用程序,它们有一个对Hibernate实现的通用引用,但运行在不同的Tomcat实例上。因此,例如,在Hibernate中配置的最小大小为3(使用
c3p0
)的连接池在所有项目运行时将导致12连接打开(每个实例3个)

我想与实例“共享”Hibernate实现(因此总是打开3个连接,而不是12个),我想知道实现它的最佳解决方案

有什么建议吗


谢谢你,你做不到。每个Tomcat实例都在自己的JVM中运行,所以您不能在它们之间共享对象或类


你为什么不喜欢12分贝的连接?现代数据库系统能够处理数百万个连接。

一种方法是创建一个额外的后端服务,该服务运行Hibernate,并通过Web服务连接到前端服务。这样将有一个Hibernate实例

我想与实例“共享”Hibernate实现(因此总是打开3个连接,而不是12个),我想知道实现它的最佳解决方案。有什么建议吗

这不是一个好主意。简言之,连接池的大小应该能够包含足够的连接来服务传入的并发请求,而无需等待连接可用。对于4个应用程序,您很可能需要3个以上的连接。你的逻辑有问题(或不清楚)

因此,我的建议是分配足够的资源,并适当调整线程池和连接池的大小,以服务于每个应用程序应该处理的并发请求,而不会耗尽池

另见

您所说的“hibernate实现”是什么意思?所有4个web项目都引用了另一个实现hibernate的项目(DAO类、db实体等)。因此,当web项目部署在不同的Tomcat实例上时,Hibernate会被初始化4次。这将删除多个
SessionFactory
实例(但会为远程处理带来额外的开销),但不会降低服务4个客户端应用程序并发请求所需的连接数(所有最大值的总和)。确实,存在一些远程处理开销,但这是一种为多个前端共享一个Hibernate实例的方法。每个应用程序都有自己的数据库消耗率。例如,假设app1、app2、app3和app4需要池中1分钟的连接(打开的总连接数:4).突然,app4增加了db上的工作量,因此我想将db上的活动最小值从4增加到6(app4再增加2个)。因为Hibernate实例化了4次,并且每个应用程序的配置都相同,所以我无法将app4调整为特定设置:如果我将min connection增加到3,那么我将在db上有12个活动连接,而不是6个。解决方案可能是在单独的实例上导出Hibernate实现,然后访问DAO通过远程处理或类似的方式。我只是想知道哪种可能是最好的解决方案。@Marco我不明白为什么不能分别配置每个应用程序。只需覆盖每个应用程序的设置,例如在类路径上提供一个
hibernate.properties
文件。没有任何技术原因阻止您你没有这么做。所以你不是说什么都不说,就是你在创建一个不存在的约束。就我个人而言,我更喜欢在同一个VM中运行Hibernate,我会坚持当前的配置,但提供特定于应用程序的设置。你是对的,我一直坚信它是独立的,我一直在努力思考说出来,我看不出明显的解决办法。谢谢!