JBossWeb源代码分析系列:Session定时失效分析

2008-10-29,星期三 | 分类:JBoss AS | 标签: | 浏览:242
一、 Session失效的检查流程 JBoss AS在启动时会调用StandardEngine的start方法,在Start方法里会启动一个ContainerBackgroundProcessor的后台线程,该后台线程会定期地调用StandardEngine下的所有StandardContext的backgroundProcess方法。StandardContext的backgroundProcess将Session的失效处理委托给StandardManager的ProcessExpires完成。ProcessExpires方法会取出StandardConetext中的所有StandardSession,逐个调用StandardSession的isValid方法。IsValid方法负责判断Session是否失效,如果失效则调用StandardSession的Expire方法,发送Session失效事件并清除保存在Session中的其它信息,之后再调用StandardManager的Remove方法将该Session从StandardManager保存Session的HashMap中清除,至此整个Session的失效处理过程结束。 二、 Session失效的检查间隔 检查Session失效的时间间隔由两个参数确定,一个是后台线程ContainerBackgroundProcessor的轮询时间间隔,一个是ProcessExpires方法中检查Session失效的频率。检查失效的时间间隔 = 轮询的时间间隔 * 检查频率。涉及的关键代码如下: ContainerBase.java protected class ContainerBackgroundProcessor implements Runnable { public void run() { while (!threadDone) { try { Thread.sleep(backgroundProcessorDelay * 1000L); } catch (InterruptedException e) { ; } ManagerBase.java public void backgroundProcess() { count = (count + 1) ...