作者LucifarAH (T-Pure)
看板java
标题[问题] 有关session与HttpSession型别转换
时间Wed Dec 14 18:59:56 2011
想请教各位先进
因为目前要写关於session存取到Redis资料库的程式
碰到了不少与PersistentManager, session, HttpSession相关的问题
主要碰到的问题在於
如果要将session存至redis内,使用下述的code
public void save(Session session) throws IOException {
ObjectOutputStream oos = null;
ByteArrayOutputStream bos = null;
Map<byte[], byte[]> hash = new HashMap<byte[], byte[]>();
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(new BufferedOutputStream(bos));
((StandardSession) session).writeObjectData(oos);
oos.close();
oos = null;
hash.put(ID_FIELD, session.getIdInternal().getBytes());
hash.put(DATA_FIELD, bos.toByteArray());
Jedis jedis = getJedis();
jedis.hmset(session.getIdInternal().getBytes(), hash);
closeJedis(jedis);
}
即可将资料存到redis
然而在撷取session这边碰到了不少的麻烦..
原因在於抓session的地方使用的是
HttpServletRequest request
HttpSession session = request.getSession(true);
而HttpSession似乎无法型态强制转换到session (org.apache.catalina.Session)
会出现的exception为
java.lang.ClassCastException:
org.apache.catalina.session.StandardSessionFacade cannot be cast to
org.apache.catalina.Session
原先利用修改context.xml让redis能自动存取session
不过碰到tomcat出现诡异的60 sec cycle
(每隔六十秒才会将session存至redis的诡异情形)
因此手动想写出同样的功能时碰到这个问题
而又不了解PersistentManager是在哪边call session store相关的API
因此想请教版上的先进是否有相关的经验
或是有更好的方法能处理
谢谢~~
补充: 使用环境是tomcat6
jedis 2.0.0
※ 编辑: LucifarAH 来自: 221.169.119.100 (12/14 20:53)
1F:推 PsMonkey:==.=== 自己实做想要的 DTO? [逃] 12/15 11:55
2F:推 kimkao:推直接做DTO XD 12/15 12:19
3F:推 Chikei:PersistenceManager每processExpiresFrequency * container 12/15 15:38
4F:→ Chikei:的backgroundProcessorDelay秒才会跑一次检查,并不诡异 12/15 15:39