From 06fecda28fc6bdd7f0c1cdec0e382d25f8da64c2 Mon Sep 17 00:00:00 2001 From: markt Date: Wed, 17 Nov 2010 23:24:25 +0000 Subject: [PATCH] Refactor the calculation of session manager statistics to the session manager as suggested by kkolinko git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1036281 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/catalina/session/ManagerBase.java | 19 +++++++++++++++++++ java/org/apache/catalina/session/StandardSession.java | 18 ------------------ 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/java/org/apache/catalina/session/ManagerBase.java b/java/org/apache/catalina/session/ManagerBase.java index 88bca2696..f92d2e4ba 100644 --- a/java/org/apache/catalina/session/ManagerBase.java +++ b/java/org/apache/catalina/session/ManagerBase.java @@ -1003,6 +1003,25 @@ public abstract class ManagerBase extends LifecycleMBeanBase */ @Override public void remove(Session session) { + + // If the session has expired - as opposed to just being removed from + // the manager because it is being persisted - update the expired stats + if (!session.isValid()) { + long timeNow = System.currentTimeMillis(); + int timeAlive = (int) ((timeNow - session.getCreationTime())/1000); + synchronized (this) { + if (timeAlive > getSessionMaxAliveTime()) { + setSessionMaxAliveTime(timeAlive); + } + long numExpired = getExpiredSessions(); + numExpired++; + setExpiredSessions(numExpired); + int average = getSessionAverageAliveTime(); + average = (int) (((average * (numExpired-1)) + timeAlive)/numExpired); + setSessionAverageAliveTime(average); + } + } + if (session.getIdInternal() != null) { sessions.remove(session.getIdInternal()); } diff --git a/java/org/apache/catalina/session/StandardSession.java b/java/org/apache/catalina/session/StandardSession.java index cf7e2ed4c..4be7050df 100644 --- a/java/org/apache/catalina/session/StandardSession.java +++ b/java/org/apache/catalina/session/StandardSession.java @@ -835,24 +835,6 @@ public class StandardSession } setValid(false); - /* - * Compute how long this session has been alive, and update - * session manager's related properties accordingly - */ - long timeNow = System.currentTimeMillis(); - int timeAlive = (int) ((timeNow - creationTime)/1000); - synchronized (manager) { - if (timeAlive > manager.getSessionMaxAliveTime()) { - manager.setSessionMaxAliveTime(timeAlive); - } - long numExpired = manager.getExpiredSessions(); - numExpired++; - manager.setExpiredSessions(numExpired); - int average = manager.getSessionAverageAliveTime(); - average = (int) (((average * (numExpired-1)) + timeAlive)/numExpired); - manager.setSessionAverageAliveTime(average); - } - // Remove this session from our manager's active sessions manager.remove(this); -- 2.11.0