docs: private DestinationHandler createForeignDestination(DestinationForeignDefinition dfd, String busName) throws SIResourceException, SINotPossibleInCurrentConfigurationException
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "createForeignDestination", new Object[] { dfd, busName });
  
          ForeignDestinationHandler fdh = 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)
          {
              // Create a new DestinationHandler, which is created locked
              fdh = new ForeignDestinationHandler(dfd, messageProcessor, this, findBus(dfd.getBus()), busName);
  
              DestinationIndex.Type type = new DestinationIndex.Type();
              type.foreignDestination = Boolean.TRUE;
              type.alias = Boolean.FALSE;
              type.local = Boolean.FALSE;
              type.remote = Boolean.FALSE;
              type.queue = new Boolean(!fdh.isPubSub());
              type.state = State.ACTIVE;
              destinationIndex.put(fdh, type);
  
              fdh.registerControlAdapters();
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "createForeignDestination", fdh);
  
          return fdh;
      }