docs: public void search(
      String theTopic,
      MatchSpaceKey msg,
      EvalCache cache,
      MessageProcessorSearchResults searchResults)
      throws BadMessageFormatMatchingException,
             MatchingException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(
          tc,
          "search",
          new Object[] { theTopic, msg, cache, searchResults });
  
      // If security is switched on then we need to maintain the integrity of
      // the ACLs in the cache in the face of dynamic updating
      if(_isBusSecure)
      {
        int aclVersion = _messageProcessor.
                           getDiscriminatorAccessChecker().
                           getAclRefreshVersion();
  
        boolean searchAgain = true;
        //Retrieve the searchresults from the matchspace
        while(searchAgain)
        {
          _matchSpace.search(theTopic, // keyed on destination name
             msg, cache, searchResults);
          // We need to be sure of the integrity of the traversal
          int newAclVersion =  _messageProcessor.
                                getDiscriminatorAccessChecker().
                                getAclRefreshVersion();
  
          // This should catch those rare cases where a traversal overlapped
          // a refresh.
          if(newAclVersion == aclVersion)
            searchAgain = false;
          else
            aclVersion = newAclVersion;
        }
      }
      else
      {
        _matchSpace.search(theTopic, // keyed on destination name
         msg, cache, searchResults);
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "search");
  
    }