多数据中心 - org.hibernate.LazyInitializationException:无法初始化代理 - 无会话

问题描述 投票:0回答:1

我们的 DB2 数据库设置在位于不同地理位置的 2 个数据中心。每个数据中心都有不同的数据库实例。

我们的应用程序在两个数据中心中设置,调用全球流量管理器(GTM)上的 VIP,该 VIP 路由到距离它最近的数据库。理想情况下,当数据中心 1 中的应用程序调用 DB VIP 时,它会连接到数据中心内的数据库。

昨晚,我们在数据中心 1 数据库 VIP 处出现(网络)问题,因此我们禁用了数据中心 1 VIP,这确保了对数据库的所有应用程序调用实际上都转到了数据中心 2 中的数据库。

数据中心 1 中的问题解决后,我们为数据中心 1 启用了 DB VIP。但不久之后,我们开始看到以下休眠异常。

感谢对此的任何见解以及我们如何解决它?

org.hibernate.LazyInitializationException:无法初始化代理 - 无会话 在org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:167) 在org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:215) 在org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:191)

hibernate jboss
1个回答
0
投票

您在故障转移后遇到的 Hibernate 异常似乎可能与会话管理问题有关。当数据中心 1 发生网络问题,并且其 VIP 被禁用,将所有应用程序调用定向到数据中心 2 时,会话状态可能会受到影响。重新启用数据中心 1 VIP 后,应用程序可能难以维持两个数据中心之间一致的会话状态,从而导致 LazyInitializationException。

要解决此问题,请考虑实施数据中心代理来管理不同数据中心的应用程序实例之间的会话状态同步。数据中心代理可以确保会话数据保持一致和同步,无论故障转移事件或路由发生变化如何。通过代理集中会话管理,您可以防止 LazyInitializationException 等问题,并在分布式环境中保持应用程序的稳定性和性能。此外,请检查您的 Hibernate 配置,以确保其配置正确,可以处理故障转移场景并有效管理跨数据中心的会话状态。

© www.soinside.com 2019 - 2024. All rights reserved.