code: void uninstallGroup(WABInstaller installer) {
          //call for each of them to be removed
          //in practice this will only mean one web container removal for the group
          //but we need all the removes to update the WAB states.
          if (wabs != null) {
              //iterating over a concurrentlinkedqueue without a lock, means we'll see everything in the list
              //thats present when we get the iterator. it will NOT throw concurrentmodification if the list is
              //modified during iteration, but also does not guarantee to reflect all external modifications
              List<WAB> toRemove = new ArrayList<WAB>();
              for (WAB wab : wabs) {
                  //remove the wab from the webcontainer, if needed.
                  wab.terminateWAB();
                  wab.removeWAB();
                  toRemove.add(wab);
              }
              wabs.removeAll(toRemove);
              if (wabs.size() != 0) {
                  installer.wabLifecycleDebug("First pass wab group uninstall detected outstanding WABs", wabs);
                  toRemove.clear();
                  for (WAB wab : wabs) {
                      //remove the wab from the webcontainer, if needed.
                      wab.terminateWAB();
                      wab.removeWAB();
                      toRemove.add(wab);
                  }
                  wabs.removeAll(toRemove);
                  //any left in the 2nd pass just don't get removed.
                  if (wabs.size() != 0) {
                      installer.wabLifecycleDebug("Second pass wab group uninstall detected outstanding WABs", wabs);
                  }
              }
          }
      }
docs: server-stop and in response to the removal of the wab feature from the server config.