首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Tomcat源码系列6-Tomcat的Session生成跟管理2

2012-09-07 
Tomcat源码系列6--Tomcat的Session生成和管理2下面谈一谈Session的管理。 一. Session的管理? 当tomcat启动

Tomcat源码系列6--Tomcat的Session生成和管理2

下面谈一谈Session的管理。


一. Session的管理?
当tomcat启动时,会开启一个后台线程,这个后台线程是随容器的启动而启动的,它将定期检查会话超时。
(org.apache.catalina.core.ContainerBase.threadStart())?

?

1.此时会新建一个ContainerBackgroundProcessor线程。
(org.apache.catalina.core.ContainerBase.ContainerBackgroundProcessor)?

public void expire(boolean notify) {                if (expiring)             return;         synchronized (this) {             if (manager == null)                 return;             expiring = true;                     //唤醒相关的应用程序事件监听者             Context context = (Context) manager.getContainer();             Object listeners[] = context.getApplicationLifecycleListeners();             if (notify && (listeners != null)) {                 HttpSessionEvent event =                     new HttpSessionEvent(getSession());                 for (int i = 0; i < listeners.length; i++) {                     int j = (listeners.length - 1) - i;                     if (!(listeners[j] instanceof HttpSessionListener))                         continue;                     HttpSessionListener listener =                         (HttpSessionListener) listeners[j];                     try {                         fireContainerEvent(context,                                            "beforeSessionDestroyed",                                            listener);                         listener.sessionDestroyed(event);                         fireContainerEvent(context,                                            "afterSessionDestroyed",                                            listener);                     } catch (Throwable t) {                         try {                             fireContainerEvent(context,                                                "afterSessionDestroyed",                                                listener);                         } catch (Exception e) {                             ;                         }                         manager.getContainer().getLogger().error                             (sm.getString("standardSession.sessionEvent"), t);                     }                 }             }             accessCount = 0;             setValid(false);             // Remove this session from our manager's active sessions             if (manager != null)                 manager.remove(this);             //唤醒相关的session事件监听者             if (notify) {                 fireSessionEvent(Session.SESSION_DESTROYED_EVENT, null);             }             // 处理完毕后,设置expiring为false             expiring = false;             //解除任何与此相关的session对象的绑定             String keys[] = keys();             for (int i = 0; i < keys.length; i++)                 removeAttributeInternal(keys[i], notify); } } 

?

?

热点排行