docs: protected void eventPreUnlocked(SIMPMessage msg, TransactionCommon tran)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "eventPreUnlocked", new Object[]{ msg, tran});
      
      if ((msg.guessRedeliveredCount() + 1) >= _baseDestHandler.getMaxFailedDeliveries())
      {
        // Override the check of the threshold from the local case because we only
        // reroute to the exception destination if we are local to the queuepoint.
        // If the threshold is reached we remove the AIMessageItem and drive the expiry
        // code - which should flow the relevant redeliveryCount back to the DME
        // in a reject.
        
        boolean tranCreated = false;
        if (tran == null)
        {
          /* Create a new transaction under which to perform the reroute */
          tran = _tranManager.createLocalTransaction(false);
          tranCreated = true;
        }
        
        // Perform a forced expiry
        ((AIMessageItem)msg).setRejectTransactionID(tran.getPersistentTranId());
        // Increment the unlockCount
        _aih.incrementUnlockCount(msg.getMessage().getGuaranteedRemoteGetValueTick());
        
        // Remove msg
        try
        {
          if (msg.isInStore())
          {
            Transaction msTran = _messageProcessor.resolveAndEnlistMsgStoreTransaction(tran);
            msg.remove(msTran, msg.getLockID());
          }
          
          if (tranCreated)
            ((LocalTransaction)tran).commit();
          
          // If successful, make sure we dont try to unlock the msg
          msg.setRedeliveryCountReached();
        }
        catch (MessageStoreException e) 
        {
          // FFDC
          FFDCFilter.processException(
            e,
            "com.ibm.ws.sib.processor.impl.RemoteConsumerDispatcher.eventPreUnlocked",
            "1:1090:1.97.2.21",
            this);
  
          SibTr.exception(tc, e);
          // Any exception will mean we wait until expiry for a reject
        }
        catch (SIException e)
        {
          // FFDC
          FFDCFilter.processException(
            e,
            "com.ibm.ws.sib.processor.impl.RemoteConsumerDispatcher.eventPreUnlocked",
            "1:1102:1.97.2.21",
            this);
  
          SibTr.exception(tc, e);
          // Any exception will mean we wait until expiry for a reject
        }      
      }
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "eventPreUnlocked");
    }