Refactor the calculation of session manager statistics to the session manager as...
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 17 Nov 2010 23:24:25 +0000 (23:24 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Wed, 17 Nov 2010 23:24:25 +0000 (23:24 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1036281 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/session/ManagerBase.java
java/org/apache/catalina/session/StandardSession.java

index 88bca26..f92d2e4 100644 (file)
@@ -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());
         }
index cf7e2ed..4be7050 100644 (file)
@@ -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);