docs: @Override
      public synchronized void timeoutTransaction(boolean initial) {
          final boolean traceOn = TraceComponent.isAnyTracingEnabled();
  
          if (traceOn && tc.isEntryEnabled())
              Tr.entry(tc, "timeoutTransaction", initial);
  
          if (traceOn && tc.isEventEnabled())
              Tr.event(tc, "(SPI) Transaction TIMEOUT occurred for TX: " + getLocalTID());
  
          _timedOut = true; // mark
  
          if (initial) // initial timeout
          {
              _rollbackOnly = true;
  
              abortTransactionParticipants();
  
              // inactivity timeout may have happened ... check status
              if (_status.getState() == TransactionState.STATE_ACTIVE) {
                  // If there is no txn timeout, or we are into completion phase the timeout setting may be zero
                  if (_timeout == 0)
                      _timeout = 10;
                  EmbeddableTimeoutManager.setTimeout(this, EmbeddableTimeoutManager.REPEAT_TIMEOUT, _timeout);
  
                  // d369039 only rollback if still in ACTIVE state
                  if (_activeAssociations <= 0) {
                      rollbackResources();
                  }
              }
          } else if (_activeAssociations <= 0) // off server ... do the rollback
          {
              final EmbeddableTranManagerSet tranManager = (EmbeddableTranManagerSet) TransactionManagerFactory.getTransactionManager();
  
              boolean resumed = false;
              try {
                  tranManager.resume(this);
                  resumed = true;
              } catch (Throwable t) {
                  FFDCFilter.processException(t, "com.ibm.ws.tx.jta.TransactionImpl.timeoutTransaction", "1311", this);
                  if (traceOn && tc.isDebugEnabled())
                      Tr.debug(tc, "timeoutTransaction resume threw exception", t);
                  // swallow this exception
              }
  
              if (resumed) {
                  boolean rolledback = false;
                  try {
                      tranManager.rollback();
                      rolledback = true;
                  } catch (Throwable t) {
                      FFDCFilter.processException(t, "com.ibm.ws.tx.jta.TransactionImpl.timeoutTransaction", "1326", this);
                      if (traceOn && tc.isDebugEnabled())
                          Tr.debug(tc, "timeoutTransaction rollback threw exception", t);
                      // swallow this exception
                  } finally {
                      if (!rolledback) {
                          tranManager.suspend();
                      }
                  }
              }
          } else // on server ... just re-schedule timeout
          {
              _rollbackOnly = true; // for the case of server quiesce?
              // inactivity timeout may have happened ... check status
              if (_status.getState() == TransactionState.STATE_ACTIVE) {
                  // If there is no txn timeout, or we are into completion phase the timeout setting may be zero
                  if (_timeout == 0)
                      _timeout = 10;
                  EmbeddableTimeoutManager.setTimeout(this, EmbeddableTimeoutManager.REPEAT_TIMEOUT, _timeout);
              }
          }
  
          if (traceOn && tc.isEntryEnabled())
              Tr.exit(tc, "timeoutTransaction");
      }