docs: public boolean registerCallbackOnExistingExpression(
      ConnectionImpl connection,
      String topicExpression,
      boolean isWildcarded,
      ConsumerSetChangeCallback callback)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.entry(
            tc,
            "registerCallbackOnExistingExpression",
            new Object[] {connection, topicExpression, new Boolean(isWildcarded), callback });
      boolean areConsumers = false;
      RegisteredCallbacks rMonitor = null;
  
      // Add the callback to the index of callbacks
      addCallbackToConnectionIndex(connection, topicExpression, isWildcarded, callback);
  
      if(isWildcarded)
        rMonitor = (RegisteredCallbacks)_registeredWildcardConsumerMonitors.get(topicExpression);
      else
        rMonitor = (RegisteredCallbacks)_registeredExactConsumerMonitors.get(topicExpression);
  
      // Get the list of callbacks and add the new one
      ArrayList callbackList = rMonitor.getWrappedCallbacks();
      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
        SibTr.debug(tc, "Found existing entry with callbacks: " + callbackList);
      WrappedConsumerSetChangeCallback wcb = new WrappedConsumerSetChangeCallback(callback);
      
      //F011127
      //When we call the registerconsumermonitor() more than once with the same parameter,
      //there will be duplicate of callback in callbacklist.To overcome this leak we are checking before adding into the callbacklist
      Iterator it = callbackList.iterator();
      boolean alreadyExisting = false;
      while(it.hasNext()){
      	WrappedConsumerSetChangeCallback tmpwcb = (WrappedConsumerSetChangeCallback)it.next();
      	if(tmpwcb.equals(wcb)){
      		if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
      		      SibTr.debug(tc, "The same callback is already registerd for the topic expression :"+topicExpression+" Hence registration will not be done!");
      		alreadyExisting = true;
      		break;
      	}
      }
      if(!alreadyExisting)
          callbackList.add(wcb);
  
      // Get the list of matching consumers
      ArrayList consumerList = rMonitor.getMatchingConsumers();
      // Are there consumers for this expression
      areConsumers = !consumerList.isEmpty();
  
      // Don't need to adjust the references in the consumer list as they will
      // already have a reference to this topic expression
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "registerCallbackOnExistingExpression", new Boolean(areConsumers));
  
      return areConsumers;
    }