浏览 4739 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2003-11-26
问题就是用ThreadLocal管理session之后,多次访问同一个servlet或者jsp,很多时候会用的是同一个线程,拿到的session应该也是同一个,那就不去数据库里取数据了,那这个cache要多久才会过期呢?能不能自己设置? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2003-11-26
missingu 写道 就算不用JCS,只要session里有这个对象,一样不需要去数据库里重新取。
问题就是用ThreadLocal管理session之后,多次访问同一个servlet或者jsp,很多时候会用的是同一个线程,拿到的session应该也是同一个,那就不去数据库里取数据了,那这个cache要多久才会过期呢?能不能自己设置? 你都在说些啥?每句话都从头错到尾。 |
|
返回顶楼 | |
发表时间:2003-11-26
就是一个简单的test方法,里面get一个session,然后session里load一个对象,然后把session close了。
main方法里连续运行这个test方法两次,第一次从数据库取数据,第二次就没有从数据库里拿了 |
|
返回顶楼 | |
发表时间:2003-11-26
引用 第一次从数据库取数据,第二次就没有从数据库里拿了
你怎么判断出第二次没有去数据库拿的? |
|
返回顶楼 | |
发表时间:2003-11-26
第二次查询的时候没有把sql 打印出来,是不是就是说没有向数据库发sql了?
|
|
返回顶楼 | |
发表时间:2003-11-26
把程序和映射文件贴出来看看
|
|
返回顶楼 | |
发表时间:2003-11-26
missingu 写道 就算不用JCS,只要session里有这个对象,一样不需要去数据库里重新取。
问题就是用ThreadLocal管理session之后,多次访问同一个servlet或者jsp,很多时候会用的是同一个线程,拿到的session应该也是同一个,那就不去数据库里取数据了,那这个cache要多久才会过期呢?能不能自己设置? 使用ThreadLocal 管理 session ,你怎么释放这个session 呢? 难道锁定在Thread中? |
|
返回顶楼 | |
发表时间:2003-11-26
找到原因了,代码和映射文件都没问题,是我误解了session.load()和JCS的用法。
因为之前看到有个关于JCS跟存储过程的帖子说,Session.load()有可能完全不从数据库里取数据,因而都有可能跟JCS的cache数据不一致,这是没错的;同时又看到说只有Iterator 才从JCS里取数据,就误以为Session.load()是不会从JCS里取数据的,只会从session自己的cache里取。如果看看hibernate的源代码应该就不会返这种错了....... 结果就是以为JCS对session.load没影响,所以<jcs-cache usage="read-write"/> 没有注释掉........ 浪费了Robbin这么多时间:( |
|
返回顶楼 | |
发表时间:2003-11-26
释放session的代码:
public void release(); { Session ses=(Session);mSessionTLS.get();; if(null==ses); { return; // there is no session to release } mSessionTLS.set(null);; // sets thread's session to null try { ses.close();; } catch(HibernateException he); { if(mLogger.isDebugEnabled();); { mLogger.debug("HibernateUtils.exceptionClosing", he);; } } } |
|
返回顶楼 | |