docs: private void beginStopping(boolean application, J2EEName j2eeName, Collection<EJBModuleMetaDataImpl> modules) { // F743-26072
          boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
          if (isTraceOn && tc.isEntryEnabled())
              Tr.entry(tc, "beginStopping: application=" + application + ", " + j2eeName);
  
          synchronized (this) {
              if (application) { // F743-26072
                  ivStopping = true;
              }
  
              // F743-15941 - If the application or fine-grained module start
              // failed, then we never transitioned to "fully started". Unblock
              // any threads that are waiting in checkIfEJBWorkAllowed.
              //
              // This call is within the synchronized block only to reduce
              // monitor acquisition/release.
              unblockThreadsWaitingForStart();
          }
  
          if (j2eeName != null) {
              // d589357 - Cancel non-persistent timers. We do not allow new
              // non-persistent timers to be created after the application or
              // module has begun stopping (e.g., during PreDestroy), so we also
              // remove all existing timers before calling PreDestroy.
              ivContainer.getEJBRuntime().removeTimers(j2eeName); // F743-26072
          }
  
          if (ivSingletonInitializations != null) {
              List<EJSHome> reverse = new ArrayList<EJSHome>(ivSingletonInitializations);
              for (int i = reverse.size(); --i >= 0;) {
                  EJSHome home = reverse.get(i);
                  J2EEName homeJ2EEName = home.getJ2EEName();
  
                  if (application || (j2eeName.getModule().equals(homeJ2EEName.getModule()))) {
                      home.destroy();
                      ivSingletonInitializations.remove(home);
                  }
              }
          }
  
          try {
              notifyApplicationEventListeners(modules, false); // F743-26072
          } catch (RuntimeWarning rw) {
              FFDCFilter.processException(rw, CLASS_NAME + ".stopping", "977", this);
          }
  
          if (isTraceOn && tc.isEntryEnabled())
              Tr.exit(tc, "beginStopping");
      }