if (_sessionStore != null) accessWindow = _sessionStore.getAccessWindowTime();
if (getSessionStore() != null) accessWindow = getSessionStore().getAccessWindowTime();
  public void handleAlarm(Alarm alarm)  {    try {      _sessionList.clear();      int liveSessions = 0;      if (_isClosed)        return;      long now = Alarm.getCurrentTime();      long accessWindow = 0;      if (_sessionStore != null)        accessWindow = _sessionStore.getAccessWindowTime();      synchronized (_sessions) {        _sessionIter = _sessions.values(_sessionIter);        while (_sessionIter.hasNext()) {          SessionArrayValue session = _sessionIter.next();          long maxIdleTime = session.getMaxInactiveInterval() + accessWindow;          if (session.inUse())            liveSessions++;          else if (session.getAccessTime() + maxIdleTime < now)            _sessionList.add(session);          else            liveSessions++;        }      }      synchronized (_statisticsLock) {        _sessionTimeoutCount += _sessionList.size();      }      for (int i = 0; i < _sessionList.size(); i++) {        SessionArrayValue session = _sessionList.get(i);        try {          long maxIdleTime = session.getMaxInactiveInterval();          _sessions.remove(session.getId());          int sessionSrunIndex = -1;           char ch = session.getId().charAt(0);          if (_sessionManager.getSrunLength() > 0)            sessionSrunIndex =               _sessionManager.decode(ch) % _sessionManager.getSrunLength();          if (_storeManager == null ||              (sessionSrunIndex == _sessionManager.getSrunIndex() &&                _sessionManager.getSrunIndex() >= 0))            session.invalidate();        } catch (Throwable e) {          log.log(Level.FINER, e.toString(), e);        }      }    } finally {      if (! _isClosed)        _alarm.queue(60000);    }  }