docs: public void uninstallBean(J2EEName homeName)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "uninstallBean " + homeName);
  
          BeanO cacheMember;
          J2EEName cacheHomeName;
          Iterator<?> statefulBeans; // d103404.1
          int numEnumerated = 0, numRemoved = 0, numTimedout = 0; // d103404.2
  
          // Enumerate through the bean cache, removing all instances
          // associated with the specified home.
          Enumeration<?> enumerate = beanCache.enumerateElements();
  
          while (enumerate.hasMoreElements())
          {
              cacheMember = (BeanO) ((CacheElement)
                              enumerate.nextElement()).getObject();
              BeanId cacheMemberBeanId = cacheMember.getId();
              cacheHomeName = cacheMemberBeanId.getJ2EEName();
              numEnumerated++;
  
              // If the cache has homeObj as it's home, remove it.
              // If the bean has been removed since it was found (above),
              // then the call to atUninstall() will just no-op.
              // Note that the enumeration can handle elements being removed
              // from the cache while enumerating.                          d103404.2
              if (cacheHomeName.equals(homeName))
              {
                  HomeInternal home = cacheMember.getHome();
                  // On z/OS, the application might be stopping in a single SR
                  // only.  We can't tell, so assume the SFSB needs to remain
                  // available for the application running in another SR, and
                  // passivate the SFSB rather than uninstalling it. LIDB2775-23.4
                  BeanMetaData bmd = cacheMemberBeanId.getBeanMetaData();
                  if (EJSPlatformHelper.isZOS() && bmd.isPassivationCapable()) {
                      try {
                          home.getActivationStrategy().atPassivate(cacheMemberBeanId);
                      } catch (Exception ex) {
                          Tr.warning(tc, "UNABLE_TO_PASSIVATE_EJB_CNTR0005W",
                                     new Object[] { cacheMemberBeanId, this, ex });
                      }
                  } else {
                      home.getActivationStrategy().atUninstall(cacheMemberBeanId,
                                                               cacheMember);
                  }
                  numRemoved++;
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { // d103404.1 d103404.2
              Tr.debug(tc, beanCache.getName() + ": Uninstalled " + numRemoved +
                           " bean instances (total = " + numEnumerated + ")");
          }
  
          // Also, uninstall all passivated Stateful Session beans for the
          // specified home, regardless of whether they have timed out or not.
          // All of the beans for this home in the StatefulBeanReaper should
          // be in the passivated state (i.e. state written to a file), as the
          // above loop should have cleared all active ones from the EJB Cache.
          // Calling atUninstall on them will delete the file and remove them
          // from the reaper.                                              d103404.1
          statefulBeans = statefulBeanReaper.getPassivatedStatefulBeanIds(homeName);
          while (statefulBeans.hasNext())
          {
              // Call atUninstall just like for those in the cache... atUninstall
              // will handle them not being in the cache and remove the file.
              // Note that atTimeout cannot be used, as the beans (though passivated)
              // may not be timed out, and atTimeout would skip them.         d129562
              BeanId beanId = (BeanId) statefulBeans.next();
              // LIDB2775-23.4 Begins
              if (EJSPlatformHelper.isZOS())
              {
                  statefulBeanReaper.remove(beanId);
              } else
              // LIDB2775-23.4 Ends
              {
                  beanId.getActivationStrategy().atUninstall(beanId, null);
              }
              numTimedout++;
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) { // d103404.2
              Tr.debug(tc, "Passivated Beans: Uninstalled " + numTimedout +
                           " bean instances");
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "uninstallBean");
      }