JBossWeb源代码分析系列:Session定时失效分析
一、 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) ...





