docs: public SIMPMessage getMessageLocked() throws MessageStoreException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
        SibTr.entry(this, tc, "getMessageLocked");
  
      SIMPMessage msg = null;
      SIBUuid8 currentUuid = null;
     
      synchronized(this)
      {
        Iterator<SIBUuid8> it = consumerKeys.keySet().iterator();
        
        // We either do a round robin of the queue points OR we pick the local one a
        // certain percentage of the time.
        int localQPWeighting = dispatcher.getMessageProcessor().getCustomProperties().get_gathering_local_weighting();
        
        if (Math.random() < ((double)localQPWeighting/100.0))
        {
          // Attempt to get a message from the local queue point
          currentUuid = dispatcher.getMessageProcessor().getMessagingEngineUuid();
          msg = (SIMPMessage)((LocalQPConsumerKey)consumerKeys.get(currentUuid)).getDefaultGetCursor().next();       
        }
        
        // If its time to choose a remote qp, or we looked on the local one but couldnt find one,
        // revert to round robin on all the queue points (note this does include the local one)
        if (msg == null)
        {
          boolean startedSearch = false;
          int iterations = 0;
          int searchCount = 0;
          int numberOfKeys = consumerKeys.keySet().size();
          
          // Round robin the DMEs
          while(iterations < numberOfKeys) 
          {
            if (it.hasNext())
              currentUuid = it.next(); // Get next uuid
            else
              currentUuid = (it = consumerKeys.keySet().iterator()).next(); // End of list so get first uuid         
            
            searchCount++;
            
            if (startedSearch)
            {  
              // We now found the last queue point we looked on so start the search proper
              iterations++;
              
              LocalQPConsumerKey key = (LocalQPConsumerKey)consumerKeys.get(currentUuid);
              msg = (SIMPMessage)key.getDefaultGetCursor().next();
              if (msg != null) 
              {
                // Save the last queue point we received from.
                lastDMERequestedUuid = currentUuid;
                break;
              }
              else
                key.initiateRefill();
                
            }
            
            // We have found the last dme we requested so start looking for msgs from the next uuid
            // in the list onwards.
            if (lastDMERequestedUuid == null ||                                 // First time round
                searchCount == numberOfKeys ||                                  // Last DME used no longer in list
                (!startedSearch && currentUuid.equals(lastDMERequestedUuid)))   // Found last DME 
              startedSearch = true;          
          }
        }
      }
      
      // Set the source uuid into the msg
      if (msg != null)
        msg.setLocalisingME(currentUuid); 
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
        SibTr.exit(this, tc, "getMessageLocked", new Object[] {msg, currentUuid});
      return msg;
    }