我正在研究节点之间的缓存复制解决方案
节点A - 主节点=> Hibernate + Database + Ehcache作为二级缓存
节点B-区域节点=> Ehcache作为prmiary缓存。没有Hibernate
节点B仅用作附近的缓存进行查询。
现在我正在更新节点A中的数据(Say SudentInfo),它会被持久化并正确缓存。在复制方面(我正在使用JMS),它向Node B发送一条消息。但问题是,它发送的消息是实例CacheEntry(深层内部元素),没有办法恢复原始对象(StudentInfo)。我在节点B中得到的是具有学生某些属性的CacheEntry,但实际上并不是学生对象。
请注意,我不需要节点B中的Hibernate会话/持久性,节点B仅用于快速查询,持久性通过节点A完成。 那么有人试过这样的解决方案吗? 有没有办法将CacheEntry转换为实际对象? 或者告诉ehcache复制原始对象而不是CacheEntry。
感谢您的帮助
答案 0 :(得分:0)
“Ehcache作为二级缓存”是什么意思?作为二级缓存?
因为如果是这种情况,那么复制的对象不是对象,它是Hibernate用来存储对象的数据,它基本上等同于存储在数据库中的行级数据。
看看这篇文章,它解释了二级缓存中的内容: Truly Understanding the Hibernate Second-Level cache and Query cache
我的问题是 - 为什么不配置节点B与数据库通信 - 然后你有一个同性的设置。如果缓存恰好工作 - 那么很棒的是你得到缓存的值而不是命中数据库 - 如果不是你就点击了数据库。
除非有一些拓扑原因你不能这样做 - 我认为用相同的配置/设置运行两个节点会更容易。