docs: protected static void handleCreateDurable(
      DestinationManager DM, 
      ControlCreateDurable msg,
      MessageProcessor MP)
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc, "handleCreateDurable", new Object[] {DM, msg, MP});
  
      int       status        = STATUS_SUB_GENERAL_ERROR;
      SIBUuid12 handlerID     = msg.getGuaranteedTargetDestinationDefinitionUUID(); // create requests require a target dest ID
      String    subName       = msg.getDurableSubName();
      String    discriminator = msg.getDurableDiscriminator();
      String    selectorString      = msg.getDurableSelector();
      SelectorDomain selectorDomain = SelectorDomain.
                                        getSelectorDomain(msg.getDurableSelectorDomain());
      
      // Create a selectorProperties Map to convey any additional properties associated
      // with the selector. At present (26/03/08) there is only one additional property
      // which is itself a map (of name spaces). The name space map is used in the XPath10 selector domain
      // to map URLs to prefixes. The use of a selectorProperties map keeps the Core SPI generic but
      // when conveying information over JMF we need a simpler structure and so will need to
      // break out individual properties for transportation.
      Map<String, Object> selectorProperties = null;
      Map<String, String> selectorNamespaceMap = msg.getDurableSelectorNamespaceMap();
      if(selectorNamespaceMap != null)
      {
        selectorProperties = new HashMap<String, Object>();
        selectorProperties.put("namespacePrefixMappings", selectorNamespaceMap);
      }
  
      String    user          = msg.getSecurityUserid();
      //TODO this flag needs to be set from the message.
      boolean   isSIBServerSubject = msg.isSecurityUseridSentBySystem();
      
      try {
        // Resolve the target BaseDestinationHandler
        BaseDestinationHandler handler = (BaseDestinationHandler) DM.getDestination(handlerID, false);
        
        // We'll create SelectionCriteria based on the properties we've been passed.
        SelectionCriteria criteria = null;
        
        // Use the appropriate SelectionCriteria factory dependent on whether we've been passed
        // selectorProperties
        if(selectorProperties == null)
        {
          criteria = MP.getSelectionCriteriaFactory().
                       createSelectionCriteria(discriminator,
                                               selectorString, 
                                               selectorDomain);
        }
        else
        {
          // Non-null selectorProperties, so we create MPSelectionCriteria
          criteria = 
            MPSelectionCriteriaFactory.
              getInstance().
                createSelectionCriteria(discriminator,
                                        selectorString, 
                                        selectorDomain,
                                        selectorProperties);
        }
        
        // Ask the BaseDestinationHandler to attempt the create
        // then we send back the result.
        status = handler.createDurableFromRemote(subName, 
                                                 criteria,
                                                 user, 
                                                 msg.isCloned(),
                                                 msg.isNoLocal(),
                                                 isSIBServerSubject);
      }
      catch (Exception e)
      {
        // Log the exception
        FFDCFilter.processException(
          e,
          "com.ibm.ws.sib.processor.impl.DurableOutputHandler.handleCreateDurable",
          "1:281:1.45.1.1",
          DurableOutputHandler.class);
  
        SibTr.exception(tc, e);
      }
      
      // Forward the status to the caller and we're done
      SIBUuid8              sender = msg.getGuaranteedSourceMessagingEngineUUID(); 
      ControlDurableConfirm reply  = createDurableConfirm(MP, sender, msg.getRequestID(), status);
      MP.getMPIO().sendToMe(sender, SIMPConstants.CONTROL_MESSAGE_PRIORITY, reply);
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "handleCreateDurable");
    }