docs: public void createSubscription(
      String id,
      SubscriptionDefinition subDef,
      SITransaction tran) 
      throws SINotPossibleInCurrentConfigurationException, SIIncorrectCallException, SIMPDestinationCorruptException, SIDurableSubscriptionAlreadyExistsException, SIDiscriminatorSyntaxException, SISelectorSyntaxException, SIResourceException
     {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "createSubscription", new Object[] { id, subDef, tran });
  
      checkStarted();
       
      DestinationHandler dest;
      try
      {
        dest = destinationManager.getDestination(subDef.getDestination(), false);
      }
      catch (SITemporaryDestinationNotFoundException e)
      {
        // No FFDC code needed 
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "createSubscription", "SINotPossibleInCurrentConfigurationException");
        throw new SINotPossibleInCurrentConfigurationException(e.getMessage());
      }
  
      // set up a SelectionCriteria
      SelectorDomain sDomain = SelectorDomain.getSelectorDomain(subDef.getSelectorDomain());
      
      SelectionCriteria criteria = messageProcessor.
                                     getSelectionCriteriaFactory().
                                     createSelectionCriteria(subDef.getTopic(),
                                                             subDef.getSelector(),
                                                             sDomain);    
      ConsumerDispatcherState subState =
        new ConsumerDispatcherState(
          id,
          dest.getUuid(),
          criteria,
          subDef.isNoLocal(),
          subDef.getDurableHome(),
          dest.getName(),
          dest.getBus());
  
      subState.setIsCloned(subDef.isSupportsMultipleConsumers());
      subState.setUser(subDef.getUser(),false);
  	subState.setTargetDestination(subDef.getTargetDestination());
      
      if (!dest.isPubSub())
      {
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) 
          SibTr.exit(tc, "createSubscription", "SIIncorrectCallException");
        throw new SINotPossibleInCurrentConfigurationException(
          nls.getFormattedMessage(
            "DESTINATION_USEAGE_ERROR_CWSIP0141",
            new Object[]{dest.getName(),
                         messageProcessor.getMessagingEngineName(),
                         id},
            null));            
      }
     
      dest.createDurableSubscription(subState, (TransactionCommon) tran); 
      
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "createSubscription");
  
    }