docs: public static void onSessionEnd (@Nonnull final HttpSession aHttpSession)
    {
      ValueEnforcer.notNull (aHttpSession, "HttpSession");
  
      final ScopeSessionManager aSSM = ScopeSessionManager.getInstance ();
      final String sSessionID = aHttpSession.getId ();
      final ISessionScope aSessionScope = aSSM.getSessionScopeOfID (sSessionID);
      if (aSessionScope != null)
      {
        // Regular scope end
        aSSM.onScopeEnd (aSessionScope);
      }
      else
      {
        // Ensure session is invalidated anyhow, even if no session scope is
        // present.
        // Happens in Tomcat startup if sessions that where serialized in
        // a previous invocation are invalidated on Tomcat restart
  
        // Ensure that session.invalidate can not be called recursively
        final boolean bCanInvalidateSession = s_aRWLock.writeLocked ( () -> s_aSessionsInInvalidation.add (sSessionID));
  
        if (bCanInvalidateSession)
        {
          try
          {
            aHttpSession.invalidate ();
            if (LOGGER.isWarnEnabled ())
              LOGGER.warn ("Found no session scope but invalidated session '" + sSessionID + "' anyway");
          }
          catch (final IllegalStateException ex)
          {
            // session already invalidated
          }
          finally
          {
            // Remove from "in invalidation" list
            s_aRWLock.writeLocked ( () -> s_aSessionsInInvalidation.remove (sSessionID));
          }
        }
      }
    }