docs: @Override
      public void rollback() throws IllegalStateException, SystemException {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "rollback (SPI)");
  
          final int state = _status.getState();
  
          //
          // We are only called in this method for superiors.
          //
          if (state == TransactionState.STATE_ACTIVE) {
              //
              // Cancel timeout prior to completion phase
              //
              cancelAlarms();
  
              try {
                  _status.setState(TransactionState.STATE_ROLLING_BACK);
              } catch (SystemException se) {
                  FFDCFilter.processException(se, "com.ibm.tx.jta.TransactionImpl.rollback", "1587", this);
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "Exception caught setting state to ROLLING_BACK!", se);
                  if (tc.isEntryEnabled())
                      Tr.exit(tc, "rollback (SPI)");
                  throw se;
              }
  
              try {
                  internalRollback();
              } catch (HeuristicMixedException hme) {
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "HeuristicMixedException caught rollback processing", hme);
                  // state change handled by notifyCompletion
  
                  // Add to list of heuristically completed transactions
                  addHeuristic();
              } catch (HeuristicHazardException hhe) {
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "HeuristicHazardException caught rollback processing", hhe);
                  // state change handled by notifyCompletion
  
                  // Add to list of heuristically completed transactions
                  addHeuristic();
              } catch (HeuristicCommitException hce) {
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "HeuristicHazardException caught rollback processing", hce);
                  // state change handled by notifyCompletion
  
                  // Add to list of heuristically completed transactions
                  addHeuristic();
              } catch (SystemException se) {
                  FFDCFilter.processException(se, "com.ibm.tx.jta.TransactionImpl.rollback", "1626", this);
                  if (tc.isEventEnabled())
                      Tr.event(tc, "SystemException caught during rollback", se);
                  if (tc.isEntryEnabled())
                      Tr.exit(tc, "rollback (SPI)");
                  throw se;
              } catch (Throwable ex) {
                  FFDCFilter.processException(ex, "com.ibm.tx.jta.TransactionImpl.rollback", "1633", this);
                  if (tc.isEventEnabled())
                      Tr.event(tc, "Exception caught during rollback", ex);
                  if (tc.isEntryEnabled())
                      Tr.exit(tc, "rollback (SPI)");
                  throw new SystemException(ex.getLocalizedMessage());
              } finally {
                  notifyCompletion();
              }
          }
          //
          // Defect 1440
          //
          // We are not in ACTIVE state so we need to
          // throw the appropriate exception.
          //
          else if (state == TransactionState.STATE_NONE) {
              if (tc.isEventEnabled())
                  Tr.event(tc, "No transaction available!");
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "rollback (SPI)");
              throw new IllegalStateException();
          } else {
              if (tc.isEventEnabled())
                  Tr.event(tc, "Invalid transaction state:" + state);
              if (tc.isEntryEnabled())
                  Tr.exit(tc, "rollback (SPI)");
              throw new SystemException();
          }
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "rollback (SPI)");
      }