*/
@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());
}
}
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);