ehcache2.5缓存问题,求解??????

onse 发布于 2012/04/08 12:24
阅读 718
收藏 0
package com.mytest.web.dao.imp;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.log4j.Logger;

import com.mytest.init.info.InitCacheManager;
import com.mytest.init.info.InitConnection;
import com.mytest.web.dao.ObjectDao;

@SuppressWarnings("all")
public class StudentDao implements ObjectDao<Object[], Object>, Serializable {
	private Logger log=Logger.getLogger(StudentDao.class);
	private QueryRunner run = new QueryRunner(InitConnection.getDs(), true);

	/**
	 * 取得数据集
	 * @param "sql"XML文件中查找到的SQL语句
	 * @param "t"XML文件中查找到的SQL语句对应的参数
	 * @param "o"数据操作类型1、是查询操作2、添加、删除、修改
	 */
	public List<Object[]> getRs(Object sql, Object[] t, int o) {
		List<Object[]> stulist = new ArrayList<Object[]>();
		Cache cm = InitCacheManager.getCacheManager().getCache("DataCache");
		try {
			switch (o) {
			case 1:
				if (t != null) {
					if (cm.get("datalist") == null) {
						stulist = run.query(sql.toString(), new ArrayListHandler(), t);
						cm.put(new Element("datalist", (Serializable)stulist));
					} else {
						stulist = (List) cm.get("datalist");
					}
				} else {
					log.info("is in cache = "+cm.isKeyInCache("aa"));
					log.info("cache  == "+cm);
					if (!cm.isKeyInCache("aa")) {
						stulist = run.query(sql.toString(), new ArrayListHandler());
						cm.put(new Element("aa",(ArrayList<Object[]>)stulist));
						cm.flush();
						log.info("aaaaaaaaaaaaaaaaaa"+sql);
					} else {
						stulist = (List<Object[]>) cm.get("aa").getValue();
						System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
					}
					List<Object> lj=cm.getKeys();
					System.out.println("size=="+lj.size());
					for(int i=0;i<lj.size();i++){
						System.out.println(lj.get(i));
					}
				}
				break;

			case 2:
				if (t != null) {
					stulist.add(new Object[] { run.update(sql.toString(), t) });
				} else {
					stulist.add(new Object[] { run.update(sql.toString()) });
				}
				log.info(sql);
				break;
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}
		return stulist;
	}
}

代码中有个List对象,存放到缓存中,可以下面取的时候,发现size=0,也就是说List没有存放进去
下面是ehcache.xml配置的内容?
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="ehcache.xsd" 
	updateCheck="false"
	monitoring="autodetect" 
	dynamicConfig="true">
	<diskStore path="java.io.tmpdir" />
	<cache 
		name="DataCache" 
		eternal="false" 
		overflowToDisk="true"
		maxBytesLocalHeap="10000"
		timeToIdleSeconds="10000"
		timeToLiveSeconds="30" />
</ehcache>

请大家帮个忙!谢谢!
加载中
0
红薯
红薯
你能把那些无关的代码删掉吗,我看着头晕啊:)
0
红薯
红薯
判断对象有没有放入缓存,在 set 之后 get 同一个 key 看有没有对象即可
onse
onse
这个问题,一定要序列化List才行吗?强转成ArrayList难道就不行么?
onse
onse
对象都没有存放进缓存,所以,没有取到,我换存个字符串进去就行了,不知道这个问题怎么去解决。唉,都两天了,问题一直悬而未解哦!求解????
onse
onse
试过了,就是没有取出来啊!
0
红薯
红薯
首先要保证 List 中的每个对象都是可序列化的
onse
onse
顺便问个问题:开发的时候,使用POJO对象好,还是不使用好呢? (非Hibernate开发)
onse
onse
dbutils 查询返回的是List集合,里面存的应该是Object对象吧!
0
PaulWong
PaulWong
List里面的东西要序列化过才行。
0
幻影浪子
幻影浪子

引用来自“红薯”的答案

首先要保证 List 中的每个对象都是可序列化的
哥们你跟红薯不在一个档次啊..交流不起来
onse
onse
我?我一IT新人,当然不是一个层次啊!哥们,别看不起人啊!
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部