docs: private synchronized void registerSessionManager() {
          if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINER)) {
              LoggingUtil.SESSION_LOGGER_CORE.entering(CLASS_NAME, "registerSessionManager");
          }
          
          // If we haven't activated yet, don't try to register
          if ( this.context ==  null ) {
              if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINER)) {
                  LoggingUtil.SESSION_LOGGER_CORE.exiting(CLASS_NAME, "registerSessionManager");
              }
              return;
          }
          
          /*- Step 1: Stop applications using old SessionManager (if SessionManager has initialized) */
          if(this.smgr != null && this.smgr.isInitialized()) {
              if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, CLASS_NAME, "registerSessionManager", "Stopping applications because the SessionManager has been initialized");
              }
              try {
                  this.appRecycleService.recycleApplications(null);
              } catch(Throwable thrown) {
                 FFDCFilter.processException(thrown, getClass().getName(), "153", this);
              }
          } else {
              if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
                  LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, CLASS_NAME, "registerSessionManager", "Skipping application restart because the SessionManager is not initialized");
              }
          }
          /*- Step 2: Register new SessionManager (to allow dynamic update in WebContainer) 
           * 
           * Note that we must register a new service BEFORE unregistering the old service
           * so that anyone consuming the SessionManager can use a dynamic update (if they want to).
           */
          if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, CLASS_NAME, "registerSessionManager", "Registering a new SessionManager service");
          }
          Dictionary<String, Object> properties = this.context.getProperties();
          SessionMgrComponentImpl newSmgr = new SessionMgrComponentImpl(this.scheduledExecutorService, this.wsLocationAdmin, this.sessionStoreService, properties);
          ServiceRegistration<SessionManager> newSmgrRegistration = this.context.getBundleContext().registerService(SessionManager.class, newSmgr, properties);
          /*- Step 3: Unregister old SessionManager */
          this.unregisterSessionManager();
          if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINE)) {
              LoggingUtil.SESSION_LOGGER_CORE.logp(Level.FINE, CLASS_NAME, "registerSessionManager", "Caching new new SessionManager registration");
          }
          this.smgrRegistration = newSmgrRegistration;
          this.smgr = newSmgr;
          SessionMgrComponentImpl.INSTANCE.get().set(this.smgr);
          if (TraceComponent.isAnyTracingEnabled() && LoggingUtil.SESSION_LOGGER_CORE.isLoggable(Level.FINER)) {
              LoggingUtil.SESSION_LOGGER_CORE.exiting(CLASS_NAME, "registerSessionManager");
          }
      }