code: public void distributeRollback()
                      throws HeuristicMixedException, HeuristicHazardException, HeuristicCommitException, SystemException {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "distributeRollback");
  
          final TransactionState ts = _transaction.getTransactionState();
          ts.setRollingBackStateUnlogged();
  
          // save heuristic status (could be set by prepare)
          final int savedHeuristic = _heuristicOutcome;
  
          _outcome = false;
          _retryRequired = distributeOutcome();
  
          if (_systemException != null) {
              final Throwable toThrow = new SystemException().initCause(_systemException);
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "distributeRollback", toThrow);
              throw (SystemException) toThrow;
          }
  
          // check for heuristics ... as we will check for forget in TransactionImpl later
          // don't throw exception if previous heuristic from prepare
          if (HeuristicOutcome.isHeuristic(_heuristicOutcome) &&
              savedHeuristic == StatefulResource.NONE) {
              final Throwable toThrow;
  
              switch (_heuristicOutcome) {
                  case StatefulResource.HEURISTIC_ROLLBACK:
                      break;
  
                  case StatefulResource.HEURISTIC_HAZARD:
                      toThrow = new HeuristicHazardException();
                      if (tc.isEntryEnabled())
                          Tr.exit(tc, "distributeRollback", toThrow);
                      throw (HeuristicHazardException) toThrow;
  
                  case StatefulResource.HEURISTIC_COMMIT:
                      toThrow = new HeuristicCommitException();
                      if (tc.isEntryEnabled())
                          Tr.exit(tc, "distributeRollback", toThrow);
                      throw (HeuristicCommitException) toThrow;
  
                  default:
                      toThrow = new HeuristicMixedException();
                      if (tc.isEntryEnabled())
                          Tr.exit(tc, "distributeRollback", toThrow);
                      throw (HeuristicMixedException) toThrow;
              }
          }
  
          // restore heuristic state
          if (savedHeuristic != StatefulResource.NONE)
              _heuristicOutcome = savedHeuristic;
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "distributeRollback");
      }
docs: Distributes rollback messages to all Resources in the registered state.
  <p>
  
  @exception HeuristicMixedException
  @exception SystemException