在学习JdonFramework过程有些疑惑的地方,望请指教~

05-11-05 leafdly
1:在PageIteratorSolver的默认构造器中cacheManager = new CacheManager(new LRUCache("log.xml"));为什么是new LRUCache("log.xml")而不是new LRUCache("cache.xml")呢~
2:查询分页并不将结果写入缓存中。
望请Banq老师指点!

banq
2005-11-05 15:00
多谢指教。
第一个问题你提出非常正确,应该是cache.xml,目前已经更正。默认构造器主要适用在EJB中,在EJB容器中,需要对查询条件进行缓存,EJB直接调用cacheManager就可以。

2.查询分页不将结果保存在缓存中,因为可能存在各种查询条件,如果将各种查询结果保存在缓存中,意义不是很大。

leafdly
2005-11-05 15:35
谢谢Banq老师的回答!
查询分页并不是单指搜索查询,应该是查询操作吧,例如有一个论坛,现在得获取这个论坛的所有贴子主题然后分页,因为此论坛日访问量不低,是否应写入缓存中以能够其提高性能呢?
在PageIteratorSolver类中的cacheEnable默认为true,而在getPageIterator方法中有下列一段:
String queryKey = getQueryKey(queryParam, sqlquery, start, count);
CacheKey cacheKey = getCacheKey(queryKey);
pageIterator = (PageIterator) cacheManager.fetchObject(cacheKey);
if ( (pageIterator == null) || (!cacheEnable) )
{
pageIterator = pageIteratorJDBC.fetchDatas(queryParams, sqlquery, start, count);
int allCount = getDatasAllCount(queryParams, sqlqueryAllCount);
pageIterator.setAllCount(allCount);
if ( (cacheEnable) && (pageIterator != null))
{
cacheManager.putObect(cacheKey, pageIterator);
cacheKeyList.add(cacheKey);
}
}

这应该是先从cache中提取PageIterator吧,如果提取到的PageIterator为空,再重新从数据库中查询得到,然后再将pageIterator写入cache中。从流程中来看应该是将查询结果写入到缓存中了啊,可实际上确没有。


JdonFrameWork真是太精辟了,有些地方还没太搞明白,所以还请Banq老师别嫌我烦!

banq
2005-11-05 16:03
哦, pageIterator实际是查询结果的ID集合,我前面回复不是很精确。
在jdon开发指南中我也提了,缓存ID集合,然后根据ID从缓存中逐个取Model,这个思想实际也是来自Jive,不过Jive缓存无法剥离。

leafdly
2005-11-05 17:03
整个流程到了明白了,就是不懂为什么PageIteratorSolver内置了缓存,而缓存却不起作用呢?
下面是部分日志,帮看一下是哪里出现问题了,怎么才能使用缓存起作用

leafdly3K7dn72c0F.log

banq
2005-11-05 18:36
在log中已经执行了save cache,那么缓存应该在下次执行时起作用,save cache后面是缓存的key。

你的log没有显示第二次执行记录,缓存执行的过程应该是这样:
第一次执行:
try to get ...
save cache

第二次执行:
try to get ..
got ...//出现这一行表示缓存起作用了

leafdly
2005-11-07 09:34
下列是部分代码
PageIteratorSolver pageIteratorSolverOfUser=new PageIteratorSolver(dataSource);
public PageIterator getUsers(int start,int count)
{
try
{
String GET_ALL_ITEMS_ALLCOUNT="select count(*) from userManager";
String GET_ALL_ITEMS="select ID from userManager order by ID desc";
return pageIteratorSolverOfUser.getDatas("",GET_ALL_ITEMS_ALLCOUNT,GET_ALL_ITEMS,start,count);
}catch(Exception ex)
{
System.out.println(ex.getMessage());
return new PageIterator();
}
}

这和JdonFrameworkTest里的一样啊,但为什么会出现第二次取到的缓存是Null呢~

banq
2005-11-07 14:43
你的日志是正常啊,你再刷新页面时,就会发现got日志了。

leafdly
2005-11-07 15:57
无论怎么刷新都不行的,这个完整的Log

leafdly2J6Ql01Nb3.log

尽管还没有解决,还得多谢Banq老师的帮忙~!!!!

banq
2005-11-07 18:15
Jdon框架的日志没有显示出来,只显示你的应用系统的结果。配置一下log4j使com.jdon的日志显示出来。

一般估计缓存会正常的。不用担心。

猜你喜欢