docs: public synchronized void stop(String J2EEName) {
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.entering(methodClassName, methodNames[STOP]);
          }
  
          decrementRefCount();
          if (this._refCount > 0) {
              if (_sap.getAppName() == "GLOBAL_HTTP_SESSION_CONTEXT") { // only call if global context
                  stopListeners(J2EEName); // for global sessions, might have to stop some
                  // listeners...
              }
              // shared sessions -- another app is still using this SessionContext
              if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[STOP], "Reference count is not zero, so returning without stopping");
              }
              return;
          }
  
          String coreManagerId = _coreHttpSessionManager.getID();
          // invalidateAllMemorySessions for in memory, and writes out sessions not
          // written out and passivates for persistent cases
          _coreHttpSessionManager.getIStore().stop();
          if (_coreHttpAppSessionManager != null) {
              // done above - boolean cleanUpAppSessionManager =
              // ((ApplicationSessionManager)_coreHttpAppSessionManager).removeSessionManager(_coreHttpSessionManager.getID());
              // REG - might want to move it back up
              // we need to remove the session manager so we don't try to access the
              // session while stopping
              cleanUpAppSessionManager(coreManagerId, J2EEName);
          }
  
          _invalidator.stop(); // stop invalidator thread
          if (_storer instanceof ITimer) { // stop tbw thread
              ((ITimer) _storer).stop();
          }
  
          String appName = _sap.getAppName();
          SessionContextRegistry.remove(appName);
          // need to update the SessionManagerRegistry to free up memory
          SessionManagerRegistry.getSessionManagerRegistry().unregisterSessionManager(appName);
  
          SessionManager removedSessionManager = SessionManager.removeSessionManager(appName);
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINEST)) {
              LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINEST, methodClassName, methodNames[STOP], "Removed session manager: " + removedSessionManager);
          }
  
          if (com.ibm.ejs.ras.TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.exiting(methodClassName, methodNames[STOP]);
          }
      }