如果缓存的一部分被更新或 clean 了,该怎么办?

怕 banq 不喜欢看认为已经正确回答的帖子,所以只好新开了。

假如我缓存中有 message 对象,该对象有 message.author,而这个 author 也是缓存中的一个对象

现在我在别的地方把 author clean 了,但 message 还在,如何让 message 知道呢?难道每次清楚一个 user 对象都要手动通知相关对象?好象无法做到啊

目前没有找到一劳永逸的完美解决方案,AOP可能是最接近的方式,但是AOP对Model的干预性能还是需要考量,当然象spring2.0那样使用另外一种javac编译又带来了其他问题。

现在只有在业务层手工进行更新,因为Model对象是你设计的,你有责任负责保证他们状态的一致性,就象你考虑事务隔离级别来保持数据状态一致性一样。

然而我们很难做到啊,如下面 ModleListAction 中的代码

} else {
//首先从缓存中获取
ModelKey modelKey = new ModelKey(dataKey, modelClass);
model = modelManager.getCache(modelKey);

我们查询缓存,这个缓存是存在的,而实际上它已经不完整了,但是程序不知道,所以它不会自动去更新,从而产生 null

但是我们在清除某个 modle 的时候又无法知道引用它的其它 modle,从而也无法对其做相应处理。

>我们在清除某个 modle 的时候又无法知道引用它的其它 modle
我们根据Evans DDD设计Model类图时,那些Model和另外Model对象发生关联,这些都是知道的,没有这些关联类图,如何有后面的程序代码。

至于清除Model缓存更多细节,可见JF文档:
http://www.jdon.com/jdonframework/doc/JdonFramework015.htm

jdon 的缓存系统确实有些复杂 。。。需要慢慢理清

另外,官方的论坛首页,每个分类的最后发帖好像也是不同步的,显示的和进入该板块的实际最后发帖不一致

>每个分类的最后发帖好像也是不同步的
是这样,缓存同步不是一件简单事情,它和事务 以及多线程一起,是JavaEE中最复杂的部分,所以才会有EJB这样打包专家出现。

目前我也在调试这些BUG。