docs: @Override
      public void releaseSession(Object sessionObject, SessionAffinityContext affinityContext) {
          ISession session = (ISession) sessionObject;
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, "releaseSession", "sessionID = " + session.getId());
          }
          // XD change: both the decrement of the ref count, and the potential check
          // of the ref count
          // in _store.releaseSession(session) need to be synchronized in case of
          // multi-threaded access
          synchronized (session) {
              session.decrementRefCount();
  
              if (session.isValid()) {
                  session.updateLastAccessTime();
                  session.setIsNew(false);
                  boolean fromCookie = false; // not always used ... if affinityContext is
                                              // null, just default to false
                  if (affinityContext != null) {
                      fromCookie = affinityContext.isRequestedSessionIDFromCookie();
                  }
                  _storer.storeSession(session, fromCookie);
              }
  
              _store.releaseSession(session);
              _sessionEventDispatcher.sessionReleased(session);
          }
      }