docs: public synchronized void rollback()
        throws SIIncorrectCallException, 
               SIResourceException,
               SIConnectionLostException, 
               SIErrorException
     {
        if (tc.isEntryEnabled()) SibTr.entry(this, tc, "rollback");
        
        if (!valid) 
        {
           throw new SIIncorrectCallException(
              nls.getFormattedMessage("TRANSACTION_COMPLETE_SICO1022", null, null)
           );
        }
        
        // Mark this as invalid
        valid = false;
  
        CommsByteBuffer request = getCommsByteBuffer();
        request.putShort(getConnectionObjectID());
        request.putInt(getTransactionId());
        
        CommsByteBuffer reply = null;
        try
        {
           // Pass on call to server
           reply = jfapExchange(request,
                                JFapChannelConstants.SEG_ROLLBACK_TRANSACTION,
                                lowestPriority,
                                true);
           
           // Inform any associated consumers of the rollback, in case there are
           // redelivery ordering considerations. We do this regardless of the
           // success of the rollback, but need to do it after the rollback has
           // been sent to the ME.
           informConsumersOfRollback();
           
           short err = reply.getCommandCompletionCode(JFapChannelConstants.SEG_ROLLBACK_TRANSACTION_R);
           if (err != CommsConstants.SI_NO_EXCEPTION)
           {
              checkFor_SIIncorrectCallException(reply, err);
              checkFor_SIResourceException(reply, err);
              checkFor_SIConnectionLostException(reply, err);
              checkFor_SIErrorException(reply, err);
              defaultChecker(reply, err);
           }
        }
        catch (SIConnectionDroppedException e)
        {
           // No FFDC Code needed
           // PK60857:  The connection broke on us, but the ME side will eventually timeout
           // and assume rollback.  So we can safely consume this exception.  We previously
           // threw an exception here but that leaked a connection from the pool because
           // the tx never completed.
           if (tc.isDebugEnabled()) SibTr.debug(this, tc, "Connection failure during rollback.");
        }
        finally
        {
           if (reply != null) reply.release();
        }
        
        if (tc.isEntryEnabled()) SibTr.exit(this, tc, "rollback");
     }