2010-02-19 109 views
0

我上的节点之间的高速缓存复制解决方案工作休眠和ehcache的复制

节点A - 主节点=>休眠+数据库+了Ehcache作为二级缓存
节点B - 区域节点=>了Ehcache作为prmiary缓存。没有休眠

节点B仅用作查询的附近缓存。

现在我正在更新节点A中的数据(Say SudentInfo),它会被正确保存并缓存。在复制端(我正在使用JMS),它向Node B发送消息。但问题是,它发送的消息是实例CacheEntry(深层内部元素),没有办法重新生成原始对象(StudentInfo)。我在节点B中得到的是具有学生属性的CacheEntry,但实际上并不是学生对象。

请注意,我不需要节点B中的Hibernate会话/持久性,节点B仅用于快速查询,持久性是通过节点A完成的。 那么有没有人试过这样的解决方案? 有没有办法将CacheEntry转换为实际的对象? 或告诉ehcache复制原始对象而不是CacheEntry。

感谢您的帮助

回答

0

“Ehcache as secondary cache”是什么意思?作为二级缓存

因为如果是这种情况,那么复制的对象不是对象,而是Hibernate用来存储对象的数据,它基本上等同于存储在数据库中的行级数据。

看看这篇文章,它解释了什么是在二级缓存: Truly Understanding the Hibernate Second-Level cache and Query cache

我对你的问题是 - 为什么配置节点B到与数据库对话 - 那么你有一个同质设置。如果缓存恰好在工作 - 那么你会得到缓存值并且不会触及数据库 - 如果不是,则会触发数据库。

除非有一些拓扑原因,否则你无法做到这一点 - 在我看来,使用相同的配置/设置运行两个节点会容易得多。