code: public boolean distributeForget() throws SystemException {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "distributeForget", this);
  
          boolean retryRequired = false; // indicates whether retry necessary
          final int resourceCount = _resourceObjects.size();
  
          // Browse through the participants, processing them as appropriate
          for (int i = 0; i < resourceCount; i++) {
              final JTAResource currResource = _resourceObjects.get(i);
  
              switch (currResource.getResourceStatus()) {
                  case StatefulResource.HEURISTIC_COMMIT:
                  case StatefulResource.HEURISTIC_ROLLBACK:
                  case StatefulResource.HEURISTIC_MIXED:
                  case StatefulResource.HEURISTIC_HAZARD:
                      if (forgetResource(currResource)) {
                          retryRequired = true;
                          _retryRequired = true;
                      }
                      break;
  
                  default: // do nothing
                      break;
  
              } // end switch
  
          } // end for
  
          if (_systemException != null) {
              final Throwable toThrow = new SystemException().initCause(_systemException);
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "distributeForget", toThrow);
              throw (SystemException) toThrow;
          }
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "distributeForget", retryRequired);
          return retryRequired;
      }
docs: Distributes forget messages to all Resources in
  the appropriate state. Called during retry and mainline.
  
  @return boolean value to indicate whether retries are necessary.