docs: private DestinationHandler createRemoteDestination(
                                                         DestinationDefinition destinationDefinition,
                                                         Set<String> queuePointLocalizingMEs) throws SIResourceException, SIIncorrectCallException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(
                          tc,
                          "createRemoteDestination",
                          new Object[] { destinationDefinition, queuePointLocalizingMEs });
  
          BaseDestinationHandler destinationHandler = null;
  
          //The lock on the destinationManager is taken to stop 2 threads creating the same
          //destination and also to synchronize dynamic deletes with the
          //creation of aliases.  This stops an alias destination being created that targets a
          //destination in the process of being deleted.
          synchronized (this)
          {
              DestinationTypeFilter filter = new DestinationTypeFilter();
              filter.VISIBLE = Boolean.TRUE;
  
              DestinationHandler dh =
                              destinationIndex.findByName(destinationDefinition.getName(), messageProcessor.getMessagingEngineBus(), filter);
  
              if (dh != null)
              {
                  // DestinationHandler already created
                  destinationHandler = (BaseDestinationHandler) dh;
              }
              else
              {
                  // Create a new DestinationHandler, which is created locked
                  LocalTransaction siTran = txManager.createLocalTransaction(false);
  
                  destinationHandler =
                                  new BaseDestinationHandler(
                                                  destinationDefinition,
                                                  messageProcessor,
                                                  this,
                                                  siTran,
                                                  durableSubscriptions,
                                                  messageProcessor.getMessagingEngineBus());
  
                  // Update the set of localising messaging engines for the destinationHandler
                  // Dont create remote localisations up front.  This can be done
                  // if WLM picks one of them
                  destinationHandler.updateLocalizationSet(
                                  queuePointLocalizingMEs);
  
                  DestinationIndex.Type type = new DestinationIndex.Type();
                  type.alias = new Boolean(destinationHandler.isAlias());
                  type.foreignDestination = new Boolean(destinationHandler.isForeign());
                  type.local = new Boolean(destinationHandler.hasLocal());
                  type.queue = new Boolean(!destinationHandler.isPubSub());
                  type.remote = new Boolean(destinationHandler.hasRemote());
                  type.state = State.CREATE_IN_PROGRESS;
                  destinationIndex.put(destinationHandler, type);
  
                  // If everything succesful then commit before other threads try to use it
                  siTran.commit();
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "createRemoteDestination", destinationHandler);
  
          return destinationHandler;
      }