docs: @Override
      public ConsumerKey attachConsumerPoint(
                                             ConsumerPoint consumerPoint,
                                             SelectionCriteria criteria,
                                             SIBUuid12 connectionUuid,
                                             boolean readAhead,
                                             boolean forwardScanning,
                                             JSConsumerSet consumerSet) throws SINotPossibleInCurrentConfigurationException, SIDestinationLockedException, SISelectorSyntaxException, SIDiscriminatorSyntaxException, SIResourceException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(
                          tc,
                          "attachConsumerPoint",
                          new Object[] {
                                        consumerPoint,
                                        criteria,
                                        connectionUuid,
                                        Boolean.valueOf(readAhead),
                                        consumerSet });
  
          DispatchableConsumerPoint dispatchableConsumerPoint = (DispatchableConsumerPoint) consumerPoint;
          ConsumerKey consumerKey = null;
          synchronized (consumerPoints)
          {
              // Check if the destination has been deleted.
              if ((dispatchableConsumerPoint.getNamedDestination(this).isToBeDeleted()) ||
                  (dispatchableConsumerPoint.getNamedDestination(this).isDeleted()))
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "attachConsumerPoint", "destination deleted");
  
                  throw new SINotPossibleInCurrentConfigurationException(
                                  nls.getFormattedMessage(
                                                          "DESTINATION_DELETED_ERROR_CWSIP0111",
                                                          new Object[] { _baseDestHandler.getName(),
                                                                        _messageProcessor.getMessagingEngineName() },
                                                          null));
              }
  
              // Two types of exclusive check here:
              // 1) ReceiveExclusive when another consumer is already on Queue
              // 2) Durable when we're pubsub
              // 3) Ordered messaging enabled
              if (!_isPubSub)
              {
                  if (consumerPoints.size() > 0)
                  {
                      if (dispatchableConsumerPoint.getNamedDestination(this).isReceiveExclusive())
                      {
                          SIDestinationLockedException e = new SIDestinationLockedException(
                                          nls.getFormattedMessage(
                                                                  "DESTINATION_RECEIVE_EXCLUSIVE_CWSIP0114",
                                                                  new Object[] { _baseDestHandler.getName(),
                                                                                _messageProcessor.getMessagingEngineName() },
                                                                  null));
  
                          SibTr.exception(tc, e);
                          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                              SibTr.exit(tc, "attachConsumerPoint",
                                         "Destination receive exclusive");
                          throw e;
                      }
  
                      // If this is an ordered consumer and we already have other consumer, reject it
                      if (!dispatchableConsumerPoint.ignoreInitialIndoubts())
                      {
                          SIDestinationLockedException e = new SIDestinationLockedException(
                                          nls.getFormattedMessage(
                                                                  "TEMPORARY_CWSIP9999",
                                                                  new Object[] { _baseDestHandler.getName(),
                                                                                _messageProcessor.getMessagingEngineName() },
                                                                  null));
  
                          SibTr.exception(tc, e);
                          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                              SibTr.exit(tc, "attachConsumerPoint",
                                         "Destination locked due to indoubt messages");
                          throw e;
                      }
                      else // If this ia a normal consumer but we have an ordered consumer attached, reject the consumer
                      if (!consumerPoints.get(0).getConsumerPoint().ignoreInitialIndoubts())
                      {
                          SIDestinationLockedException e = new SIDestinationLockedException(
                                          nls.getFormattedMessage(
                                                                  "TEMPORARY_CWSIP9999", // Should be CWSIP0999??
                                                                  new Object[] { _baseDestHandler.getName(),
                                                                                _messageProcessor.getMessagingEngineName() },
                                                                  null));
  
                          SibTr.exception(tc, e);
                          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                              SibTr.exit(tc, "attachConsumerPoint",
                                         "Destination locked for ordering");
                          throw e;
                      }
                  }
              }
              else if (isDurable() && !dispatcherState.isCloned() && consumerPoints.size() > 0)
              {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "attachConsumerPoint", "SIDestinationLockedException");
                  // NOTE: this is a bit of an abuse of the locked exception since
                  // we'd rather throw SIDurableSubscriptionLockedException.
                  // We actually only see this case for remote durable when an
                  // existing AOH handles an attempt to attach to an in-use
                  // durable sub. In this case, the AOH sends a cardinality error
                  // which gets wrapped appropriately at the remote requester.
                  throw new SIDestinationLockedException(
                                  nls.getFormattedMessage(
                                                          "SUBSCRIPTION_IN_USE_ERROR_CWSIP0152",
                                                          new Object[] { dispatcherState.getSubscriberID(),
                                                                        _messageProcessor.getMessagingEngineName() },
                                                          null));
  
              }
  
              if (_baseDestHandler.isOrdered())  {
              	
                  if (consumerPoints.size() > 0) {
              
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "attachConsumerPoint", new Object[]{"SIDestinationLockedException", consumerPoints.size()});
                      // NOTE: this is a bit of an abuse of the locked exception since
                      // we'd rather throw an ordered message specific exception.
                      // We only allow one consumer to attach when ordered messaging is
                      // specified.b
                      throw new SIDestinationLockedException(nls.getFormattedMessage(
                                                             "ORDERED_DESTINATION_IN_USE_CWSIP0116",
                                                             new Object[] { _baseDestHandler.getName(),
                                                                            _messageProcessor.getMessagingEngineName() },
                                                             null));
                      
                  } else if (!isNewTransactionAllowed(null)) {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "attachConsumerPoint", new Object[]{"SIDestinationLockedException", "!isTransactionAllowed(null)"});
                      throw new SIDestinationLockedException(nls.getFormattedMessage(
                              "ORDERED_MESSAGING_ERROR_CWSIP0194",
                              new Object[] { _baseDestHandler.getName(), _messageProcessor.getMessagingEngineName() },
                              null));
  
                  }
              }
  
              //create a new ConsumerKey object and add it in to the list of
              //atatched consumer points
              consumerKey =
                              createConsumerKey(
                                                dispatchableConsumerPoint,
                                                criteria,
                                                connectionUuid,
                                                readAhead,
                                                forwardScanning,
                                                consumerSet);
  
              // Add the CP to the list irrespective of whether p2p or pubsub, we use the array
              // to keep track of whether any CPs are attached.
              consumerPoints.add((DispatchableKey) consumerKey);
  
          }
  
          //if we're a pt-pt destination
          if (!_isPubSub)
          {
              // Store the CP in the MatchSpace
              _baseDestHandler.addConsumerPointMatchTarget(
                                                           (DispatchableKey) consumerKey,
                                                           getUuid(), // uuid of the ConsumerDispatcher
                                                           criteria);
  
              // 594730: Now that we've added the conusmer's selector to the matchspace
              // we know that any search performed by internalPut will pick this consumer
              // up, so we update the specificConsumerVersion now to ensure that we re-run the
              // search. Otherwise there's a chance that a previous search (when this consumer
              // wasn't quite registered) will appear to still be valid, resulting in the
              // consumer not being found and the message not being delivered to it.
              if (((DispatchableKey) consumerKey).isSpecific())
              {
                  synchronized (_baseDestHandler.getReadyConsumerPointLock())
                  {
                      specificConsumerVersion++;
                  }
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "attachConsumerPoint", consumerKey);
          return consumerKey;
      }