最近研究了一下JdonFramework,有些问题。
1、研究了一下JF的PageIterator机制,的确不错。好像第一次加载的时候会全部读取数据库中的记录,如果表有n多记录就会很慢。自己改了一下源码,做了一次自动封装类似mysql的limit。这样在200条记录以内就不用获取,超过block大小后在自动limit下一个block的id回来。不知道有问题,因为改的代码比较少。因为我想banq一开始应该意识到这个问题。
2、然后就是cacheManager机制,如果我一开始就定义了一个cacheManager容器,那么所有JF中使用cache的地方都回使用同一个cache容器。包括ModelCacheManager也是。如果我在JF框架中定义了多个表的Model,感觉在管理ModelCacheManager时会有冲突。比如我的两个表都是一条主键id=1的记录,删除cache时是调用,CacheKeyFactory.getAllCacheKey找cache的key
public Collection getAllCacheKey(Object dataKey){
if (dataKey == null ) return null;
if (dataKey.toString() == null) return null;
String cacheKey = null;
String dataTmpKey = null;
Collection list = new ArrayList();
Map map = cacheManager.getCacheKeyMap();
Iterator iter = map.keySet().iterator();
while(iter.hasNext()){
cacheKey = (String)iter.next();
dataTmpKey = (String)map.get(cacheKey);
System.out.println("CacheKeyFactory: cacheKey="+cacheKey+"\tdataTmpKey="+dataTmpKey);
if (dataTmpKey.equals(dataKey.toString())){
list.add(cacheKey);
}
}
return list;
}
其中参数 dataKey 是主键id=1的值。循环中:cacheKey 的值是{Model+类名}
dataTmpKey 是值“1”,这样如果删除Model时由于使用了同一个CacheManager所以造成会找Model时会找出其他相同的值的Model的cache,然后del了。不知道是不是这里的颗粒度比较粗,或者我使用的方法不对。
3、好像一个组件类不能被实例化多个。如:
<component name="cacheManager" class="com.jdon.controller.cache.CacheManager" />
<component name="cacheManager2" class="com.jdon.controller.cache.CacheManager" >
<constructor value="test.Cache" />
</component>
不知道我想这种怎么实现?
希望能一起讨论一下。JF很不错,支持!
[该贴被wangcy于2008-03-07 19:56修改过]