docs: private ConsumerSession
                      internalCreateConsumerSessionForDurableSubscription(String subscriptionName,
                                                                          String durableSubscriptionHome,
                                                                          SIDestinationAddress destinationAddress,
                                                                          SelectionCriteria criteria,
                                                                          boolean supportsMultipleConsumers,
                                                                          boolean nolocal,
                                                                          Reliability reliability,
                                                                          boolean enableReadAhead,
                                                                          Reliability unrecoverableReliability,
                                                                          boolean bifurcatable,
                                                                          String alternateUser,
                                                                          boolean forwardScanning)
                                      throws SIConnectionUnavailableException, SIConnectionDroppedException,
                                      SIResourceException, SIConnectionLostException, SILimitExceededException,
                                      SIIncorrectCallException,
                                      SIDurableSubscriptionNotFoundException, SIDurableSubscriptionMismatchException,
                                      SIDestinationLockedException, SINotAuthorizedException
  
      {
  
          //liberty code change : chetan
          //Since there is no ME-ME communication the durableSubscriptionHome is always the local ME 
          durableSubscriptionHome = _messageProcessor.getMessagingEngineName();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "internalCreateConsumerSessionForDurableSubscription",
                          new Object[] { subscriptionName,
                                        durableSubscriptionHome,
                                        destinationAddress,
                                        alternateUser,
                                        criteria,
                                        Boolean.valueOf(supportsMultipleConsumers),
                                        Boolean.valueOf(nolocal),
                                        reliability,
                                        Boolean.valueOf(enableReadAhead),
                                        unrecoverableReliability });
  
          // Check that the destination information is correct.
          SIBUuid8 durableHomeID =
                          checkDurableSubscriptionInformation(subscriptionName,
                                                              durableSubscriptionHome,
                                                              destinationAddress,
                                                              supportsMultipleConsumers,
                                                              nolocal,
                                                              false,
                                                              true);
  
          // Check that the destination name of the real destination and the 
          // Destination supplied on the attachToDurable Sub match.
          HashMap durableSubs = _destinationManager.getDurableSubscriptionsTable();
  
          ConsumerDispatcher cd = null;
          // Is durableHome local?
          if (durableHomeID.equals(_messageProcessor.getMessagingEngineUuid()))
          {
              synchronized (durableSubs)
              {
                  //Look up the consumer dispatcher for this subId in the system durable subs list
                  cd =
                                  (ConsumerDispatcher) durableSubs.get(subscriptionName);
  
                  // Check that the durable subscription exists
                  if (cd == null)
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription");
  
                      throw new SIDurableSubscriptionNotFoundException(
                                      nls.getFormattedMessage(
                                                              "SUBSCRIPTION_DOESNT_EXIST_ERROR_CWSIP0072",
                                                              new Object[] { subscriptionName,
                                                                            _messageProcessor.getMessagingEngineName() },
                                                              null));
                  }
                  else if (cd.getConsumerDispatcherState().getTargetDestination() != null)
                  {
                      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                          SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription");
  
                      throw new SIDurableSubscriptionMismatchException(
                                      nls.getFormattedMessage(
                                                              "INTERNAL_SUBSCRIPTION_ACCESS_DISALLOWED_CWSIP0147",
                                                              new Object[] { subscriptionName,
                                                                            _messageProcessor.getMessagingEngineName() },
                                                              null));
                  }
              }
          }
  
          //get the destination
          DestinationHandler destination = null;
          try
          {
              destination =
                              _destinationManager.getDestination(
                                                                 (JsDestinationAddress) destinationAddress,
                                                                 false);
          } catch (SINotPossibleInCurrentConfigurationException e)
          {
              // No FFDC code needed 
  
              // This error means that the destination name of the destination supplied 
              // and the destination of the consumer don't match.
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SIDurableSubscriptionMismatchException");
              throw new SIDurableSubscriptionMismatchException(
                              nls.getFormattedMessage(
                                                      "DURABLE_MISMATCH_ERROR_CWSIP0025",
                                                      new Object[] {
                                                                    destinationAddress.getDestinationName(),
                                                                    ((cd.getDestination() == null) ? null : cd.getDestination().getName()),
                                                                    subscriptionName,
                                                                    _messageProcessor.getMessagingEngineName() },
                                                      null));
  
          } catch (SITemporaryDestinationNotFoundException e)
          {
              // No FFDC code needed
  
              // This error means that the destination name of the destination supplied 
              // and the destination of the consumer don't match.
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SIDurableSubscriptionMismatchException");
              throw new SIDurableSubscriptionMismatchException(
                              nls.getFormattedMessage(
                                                      "DURABLE_MISMATCH_ERROR_CWSIP0025",
                                                      new Object[] {
                                                                    destinationAddress.getDestinationName(),
                                                                    ((cd.getDestination() == null) ? null : cd.getDestination().getName()),
                                                                    subscriptionName,
                                                                    _messageProcessor.getMessagingEngineName() },
                                                      null));
          }
  
          // Check the destination is a topicSpace
          if (!destination.isPubSub())
          {
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "Destination not a topicspace");
  
              throw new SIDurableSubscriptionMismatchException(
                              nls.getFormattedMessage(
                                                      "DESTINATION_USEAGE_ERROR_CWSIP0141",
                                                      new Object[] { destinationAddress.getDestinationName(),
                                                                    _messageProcessor.getMessagingEngineName(),
                                                                    subscriptionName },
                                                      null));
          }
  
          String topicName = null;
          if (criteria != null)
              topicName = criteria.getDiscriminator();
  
          checkDestinationAuthority(destination, MessagingSecurityConstants.OPERATION_TYPE_RECEIVE, topicName);
  
          //create a state object representing a subscription
          ConsumerDispatcherState subState =
                          new ConsumerDispatcherState(
                                          subscriptionName,
                                          destination.getUuid(),
                                          criteria,
                                          nolocal,
                                          durableSubscriptionHome,
                                          destination.getName(),
                                          destination.getBus());
  
          if (destination.isOrdered() && supportsMultipleConsumers)
          {
              supportsMultipleConsumers = false;
              // Override and warn if ordered destination
              SibTr.warning(tc, "CLONED_SUBSCRIBER_OVERRIDE_CWSIP0028",
                            new Object[] { subscriptionName, destination.getName() });
          }
  
          subState.setIsCloned(supportsMultipleConsumers);
  
          // Set the user into the state for security checks
          // we'll set the alternate user if that is supplied
          if (alternateUser == null)
          {
              subState.setUser(getResolvedUserid(), isSIBServerSubject());
          }
          else
          {
              subState.setUser(alternateUser, false);
          }
  
          ConsumerSessionImpl consumer = null;
  
          // Synchronize on the close object, we don't want the connection closing
          // while we try to add the subscription.
          synchronized (this)
          {
              // See if this connection has been closed
              checkNotClosed();
  
              //create the consumer session for this subscription
              try
              {
                  consumer =
                                  new ConsumerSessionImpl(destination,
                                                  destinationAddress,
                                                  subState,
                                                  this,
                                                  enableReadAhead,
                                                  forwardScanning,
                                                  unrecoverableReliability,
                                                  bifurcatable,
                                                  true,
                                                  false);
              } catch (SINotPossibleInCurrentConfigurationException e)
              {
                  // No FFDC code needed
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SIErrorException");
                  throw new SIErrorException(e);
              } catch (SISessionUnavailableException e)
              {
                  // FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.internalCreateConsumerSessionForDurableSubscription",
                                              "1:2417:1.347.1.25",
                                              this);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:2423:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SIErrorException");
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:2434:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SITemporaryDestinationNotFoundException e)
              {
                  // FFDC
                  FFDCFilter.processException(
                                              e,
                                              "com.ibm.ws.sib.processor.impl.ConnectionImpl.internalCreateConsumerSessionForDurableSubscription",
                                              "1:2446:1.347.1.25",
                                              this);
  
                  SibTr.error(tc, "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                              new Object[] {
                                            "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                            "1:2452:1.347.1.25",
                                            e });
  
                  // This should never be thrown
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SIErrorException");
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:2463:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
              } catch (SINonDurableSubscriptionMismatchException e) {
                  //this exception not possible for durable and should be never thrown. So absorb here and trace it.
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", "SINonDurableSubscriptionMismatchException");
  
                  throw new SIErrorException(
                                  nls.getFormattedMessage(
                                                          "INTERNAL_MESSAGING_ERROR_CWSIP0002",
                                                          new Object[] {
                                                                        "com.ibm.ws.sib.processor.impl.ConnectionImpl",
                                                                        "1:2248:1.347.1.25",
                                                                        e },
                                                          null),
                                  e);
  
              }
  
              // TODO Check the recoverableExpress bit here
              synchronized (_consumers)
              {
                  //store a reference
                  _consumers.add(consumer);
              }
  
              _messageProcessor.addConsumer(consumer);
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "internalCreateConsumerSessionForDurableSubscription", consumer);
  
          return consumer;
      }