急于解决一个JF里的缓存问题!

07-03-22 wind13
情况是一个Model在登录后,放在HttpSession中了,以便有些针对此用户的操作,其中一项是删除这一对象,通过Jdon的ModelSaveAction删除正常,数据库中没了,但好象JdonFramework进行了缓存,依然显示在那儿,再次登录也还在那儿。

仔细调试,发现删除后,用Service的取得对象方法依然能取到旧对象,此时数据库中是没有了的。

看了http://www.jdon.com/jdonframework/doc/JdonFramework015.htm这篇文章中的缓存说明,再加上调试进入Jdon的源码,发现的确是AOP拦截了。问题基本确定!

于是想用最简单的办法,即在删除后,设置对象已修改,即调用Model的setModified(true),结果依旧不行。

                    session.delete(gp);
                    gp.setModified(true);
<p>

之后,想手工清除缓存,发现那篇文章中提到的都是容器外取得ModelManager的方法,我的操作是在Dao的实现里删除的,所以想在Dao实现里手工清除该对象的缓存。现在不知道怎么在容器内取得ModelManager对象啊?

         

banq
2007-03-23 09:19
其实JF手册里有说明的,容器内清除缓存,直接引用JF的一个类ModelManager就可以,可以参考jivejdon3中的com.jdon.jivejdon.service.util.ContainerUtil

wind13
2007-03-23 10:13
奇怪的是,通过JF的ModelSaveAction删除或更新为什么不做更新对象的处理?这样使用JF的程序员很容易陷入这类问题的怪圈,就象我一开始怀疑是Hibernate缓存的问题,查了好久,最后才发现是JdonFramework中的AOP拦截机制造成的。

所以建议彭老师在更新和删除中加上对象的更新处理,不要让用户自己去清除,因为这一点是常识性的,删除和更新后用户不会希望还留着旧的对象,具体机制您可能更清楚些,比如标记对象已修改或干脆清除掉相应对象。

另外您说的JiveJdon3中的文件是:com.jdon.jivejdon.service.util.ContainerUtil 好象应该是com.jdon.jivejdon.service.imp.ContainerUtil 不过在这个Util中是构造函数直接接收到modelManager对象的,现在的问题是如何创建一个传进去呢?难道又是IOC模式?可是我还是不知道从哪儿搞一个modelManager对象来,有了这个对象,后面的事情就知道了。

banq
2007-03-23 10:16
>通过JF的ModelSaveAction删除或更新为什么不做更新对象的处理?

做的,可以查看ModelSaveAction的源码。

>现在的问题是如何创建一个传进去呢?难道又是IOC模式

是的,直接使用就可以,使用JF等框架,不用考虑对象的创建了,就象使用完对象不用考虑对象清除一样,这就是我在N年前说的编程划时代意义啊!

wind13
2007-03-23 10:54
哦,原来真是IOC模式,呵呵……看来观念需要进步了,老是感觉不创建就用心里不踏实啊,哈哈……

第一个问题,您说做了处理,可是为什么我这里老是出现缓存的旧数据呢?发现这些对象都有个共同点,就是曾经用session.setAttribute("key",object)把对象设置到了HttpSession中了,不知道跟这个有没有什么关系?

猜你喜欢
2Go 1 2 下一页