code: public boolean registerCallbackOnNewExpression(
      ConnectionImpl connection,
      String topicExpression,
      boolean isWildcarded,
      ConsumerSetChangeCallback callback,
      ArrayList matchingConsumers)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.entry(
            tc,
            "registerCallbackOnNewExpression",
            new Object[] { connection,
                           topicExpression,
                           new Boolean(isWildcarded),
                           callback,
                           matchingConsumers});
  
      boolean areConsumers = false;
  
      // Add the new callback to the index, so we can find it when we deregister
      addCallbackToConnectionIndex(connection, topicExpression, isWildcarded, callback);
  
      // Set up the callback list for this registration
      ArrayList callbackList = new ArrayList();
      WrappedConsumerSetChangeCallback wcb = new WrappedConsumerSetChangeCallback(callback);
      callbackList.add(wcb);
  
      // Register the monitor in the appropriate table
      RegisteredCallbacks regMonitor =
        new RegisteredCallbacks(callbackList, matchingConsumers);
  
      if(isWildcarded)
        _registeredWildcardConsumerMonitors.put(topicExpression, regMonitor);
      else
        _registeredExactConsumerMonitors.put(topicExpression, regMonitor);
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "registerCallbackOnNewExpression", new Boolean(areConsumers));
      return areConsumers;
    }
docs: Method registerCallbackOnNewExpression
  
  Adds a list of matching consumers in a new entry to the appropriate wildcard
  or exact expression table.
  
  @param topicExpression
  @param isWildcarded
  @param callback
  @param matchingConsumers
  @return