docs: @Override
      public boolean checkSessionStillValid(ISession s, long accessedTime) {
          final String methodName = "checkSessionStillValid";
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, methodNames[CHECK_SESSION_STILL_VALID]);
          }
          long nowTime = System.currentTimeMillis();
          boolean rc = true;
          synchronized (s) {
              if (s.isValid()) {
                  if (s.getMaxInactiveInterval() != -1) {
                      long maxinact = 1000 * (long) s.getMaxInactiveInterval();
                      boolean active = s.getRefCount() > 0;
                      if (_isApplicationSessionStore) {
                          //the RefCount is not correct when dealing with an applicationSessionStore
                          s.setRefCount(0);
                          active = false;
                      }
                      boolean timedOut = (accessedTime <= nowTime - maxinact);
                      /*
                       * invalidate if:
                       * session has timedOut AND (is not active OR (the Invalidation Multiple has not been set to 0
                       * and the session is that many times the invalidation interval)
                       * 
                       * The default value for the invalidation interval is 3.
                       * 
                       * PK03711 removed check for active and always invalidated timedout sessions for v6.1 and earlier
                       * v7 CTS defect 391577 forced us to put this code back, so we introduced the InvalidateIfActive property
                       * In the service stream, the ForceSessionInvalidationMultiple was used, so we are using the same property
                       */
                      if ((timedOut) && ((!active) ||
                              ((_smc.getForceSessionInvalidationMultiple() != 0) &&
                                      (accessedTime <= nowTime - (_smc.getForceSessionInvalidationMultiple() * maxinact))))) {
                          if (maxinact != 0) {
                              _storeCallback.sessionInvalidatedByTimeout(s);
                          }
                          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                              String message = "Going to invalidate session with id=" + s.getId();
                              LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, methodClassName, methodNames[CHECK_SESSION_STILL_VALID], message);
                          }
                          s.invalidate();
                          rc = false;
                      }
                  }
              } else { //isValid
                  rc = false;
              }
          }
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[CHECK_SESSION_STILL_VALID]);
          }
          return rc;
      }