docs: public void stopModule(ExtendedModuleInfo moduleInfo) {
          
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.entry(tc, "stopModule()",((WebModuleInfo)moduleInfo).getName());
          }
         
          WebModuleInfo webModule = (WebModuleInfo) moduleInfo;
          try {
              DeployedModule dMod = this.deployedModuleMap.remove(webModule);
              if (null == dMod) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
                      Tr.exit(tc, "stopModule()","DeployedModule not known");
                  }
                  return;
              }
              
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "stopModule: " + webModule.getName() + " " + webModule.getContextRoot());
              }
  
              removeContextRootRequirement(dMod);
              removeModule(dMod);
              
              this.vhostManager.purgeHost(dMod.getVirtualHostName());
  
              WebModuleMetaData wmmd = (WebModuleMetaData) ((ExtendedModuleInfo)webModule).getMetaData();
              
              deregisterMBeans((WebModuleMetaDataImpl) wmmd);
              
              WebAppConfiguration appConfig = (WebAppConfiguration) wmmd.getConfiguration();
              for (Iterator<IServletConfig> servletConfigs = appConfig.getServletInfos(); servletConfigs.hasNext();) {
                  IServletConfig servletConfig = servletConfigs.next();
                  metaDataService.fireComponentMetaDataDestroyed(servletConfig.getMetaData());
              }
  
              metaDataService.fireComponentMetaDataDestroyed(appConfig.getDefaultComponentMetaData());
              metaDataService.fireComponentMetaDataDestroyed(wmmd.getCollaboratorComponentMetaData());
          } catch (Throwable e) {
              FFDCWrapper.processException(e, getClass().getName(), "stopModule", new Object[] { webModule, this });
              if (TraceComponent.isAnyTracingEnabled() && tc.isEventEnabled()) {
                  Tr.event(tc, "stopModule: " + webModule.getName() + "; " + e);
              }
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) {
              Tr.exit(tc, "stopModule()");
          }
  
      }