docs: @Override
      public ConsumerSession createMQLinkConsumerSession(
                                                         String mqLinkUuidStr,
                                                         SelectionCriteria criteria,
                                                         Reliability unrecoverableReliability)
                      throws SIConnectionUnavailableException, SIConnectionDroppedException,
                      SIResourceException, SIConnectionLostException, SILimitExceededException,
                      SIErrorException,
                      SINotAuthorizedException,
                      SIIncorrectCallException,
                      SIDestinationLockedException,
                      SINotPossibleInCurrentConfigurationException
      {
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.entry(
                          CoreSPIConnection.tc,
                          "createMQLinkConsumerSession",
                          new Object[] {
                                        mqLinkUuidStr,
                                        criteria,
                                        unrecoverableReliability });
  
          MQLinkHandler mqLinkHandler = null;
          boolean forwardScanning = false;
  
          // See if this connection has been closed
          checkNotClosed();
  
          if (mqLinkUuidStr == null)
          {
              SIIncorrectCallException e =
                              new SIIncorrectCallException(
                                              nls.getFormattedMessage(
                                                                      "MISSING_PARAM_ERROR_CWSIP0029",
                                                                      new Object[] { "1:5347:1.347.1.25" },
                                                                      null));
              if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              {
                  SibTr.exception(tc, e);
                  SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
              }
              throw e;
          }
  
          SIBUuid8 mqLinkUuid = new SIBUuid8(mqLinkUuidStr);
  
          // Get the destination. 
          mqLinkHandler = _destinationManager.getMQLinkLocalization(mqLinkUuid, false);
  
          // Check that it is an MQLink Handler
  
          if (mqLinkHandler == null)
          {
              if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                  SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", "SINotPossibleInCurrentConfigurationException");
  
              throw new SINotPossibleInCurrentConfigurationException(
                              nls.getFormattedMessage(
                                                      "MQLINK_ERROR_CWSIP0026",
                                                      new Object[] {
                                                                    mqLinkUuid,
                                                                    _messageProcessor.getMessagingEngineName() },
                                                      null));
          }
  
          ConsumerSessionImpl consumer = null;
  
          // Synchronize on the close object, we don't want the connection closing
          // while we try to add the consumer.
          synchronized (this)
          {
              // See if this connection has been closed
              checkNotClosed();
  
              //create a state object for this consumer session
              //In this basic form it is just a wrapper for the discriminator and selector 
              ConsumerDispatcherState state = new ConsumerDispatcherState(
                              null,
                              mqLinkHandler.getUuid(),
                              criteria,
                              false,
                              "", // null durableHome ok here
                              mqLinkHandler.getName(),
                              mqLinkHandler.getBusName());
  
              // Create a destination address
              SIDestinationAddress destAddress = DestinationSessionUtils.createJsDestinationAddress(mqLinkHandler);
  
              try
              {
                  //create a new ConsumerSession
                  consumer =
                                  new ConsumerSessionImpl(
                                                  mqLinkHandler,
                                                  destAddress,
                                                  state,
                                                  this,
                                                  false,
                                                  forwardScanning,
                                                  unrecoverableReliability,
                                                  false,
                                                  true,
                                                  false);
              } catch (SIDurableSubscriptionMismatchException e)
              {
                  // This exception should not be thrown so FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.createMQLinkConsumerSession",
                                              "1:5424:1.347.1.25",
                                              this);
  
                  SibTr.exception(tc, e);
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:5435:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:5444:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SINonDurableSubscriptionMismatchException e)
              {
                  // This exception should not be thrown so FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.createMQLinkConsumerSession",
                                              "1:5318:1.347.1.25",
                                              this);
  
                  SibTr.exception(tc, e);
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:5329:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:5338:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SIDurableSubscriptionNotFoundException e)
              {
                  // This exception should not be thrown so FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.createMQLinkConsumerSession",
                                              "1:5455:1.347.1.25",
                                              this);
  
                  SibTr.exception(tc, e);
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:5466:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:5475:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SISessionUnavailableException e)
              {
                  // This exception should not be thrown so FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.createMQLinkConsumerSession",
                                              "1:5486:1.347.1.25",
                                              this);
  
                  SibTr.exception(tc, e);
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:5497:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:5506:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SITemporaryDestinationNotFoundException e)
              {
                  // This exception should not be thrown so FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.createMQLinkConsumerSession",
                                              "1:5517:1.347.1.25",
                                              this);
  
                  SibTr.exception(tc, e);
  
                  if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
                      SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", e);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:5528:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:5537:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              }
  
              synchronized (_consumers)
              {
                  //store a reference
                  _consumers.add(consumer);
              }
  
              _messageProcessor.addConsumer(consumer);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && CoreSPIConnection.tc.isEntryEnabled())
              SibTr.exit(CoreSPIConnection.tc, "createMQLinkConsumerSession", consumer);
  
          return consumer;
      }