docs: @Override
      public synchronized void start(StartContext context) throws StartException {
          final RemoteDomainConnection connection;
          final ManagementChannelHandler handler;
          try {
  
              ScheduledExecutorService scheduledExecutorService = scheduledExecutorInjector.getValue();
              this.responseAttachmentSupport = new ResponseAttachmentInputStreamSupport(scheduledExecutorService);
  
              final OptionMap options = OptionMap.builder()
                      .set(RemotingOptions.HEARTBEAT_INTERVAL, 15000)
                      .set(Options.READ_TIMEOUT, 45000)
                      .getMap();
  
              // Gather the required information to connect to the remote DC
              // The URI will be set later when looping through discovery options when registering with
              // or reconnecting to the remote DC.
              final ProtocolConnectionConfiguration configuration = ProtocolConnectionConfiguration.create(endpointInjector.getValue(), options);
  
              final AuthenticationContext authenticationContext = authenticationContextInjector.getOptionalValue();
              final SecurityRealm realm = securityRealmInjector.getOptionalValue();
              // Create the remote domain channel strategy
              connection = new RemoteDomainConnection(localHostInfo.getLocalHostName(), configuration, authenticationContext, realm,
                      localHostInfo.getRemoteDomainControllerUsername(),
                      localHostInfo.getRemoteDomainControllerDiscoveryOptions(), executor, scheduledExecutorService,
                      new RemoteDomainConnection.HostRegistrationCallback() {
                  /**
                   * Calculates the metadata required when connecting to the master {@link org.jboss.as.domain.controller.DomainController}
                   * This value does not require locking during use, as {@link org.jboss.as.host.controller.mgmt.HostInfo createLocalHostHostInfo()} uses
                   * '/domain-controller', which is read-only, and '/core-service=ignored-resources/ignored-resource-type' which has handlers on
                   * add, remove and write-attribute that will place the host into reload-required.
                   * @return
                   */
                  @Override
                  public ModelNode createLocalHostInfo() {
                      return HostInfo.createLocalHostHostInfo(localHostInfo, productConfig, ignoredDomainResourceRegistry, ReadRootResourceHandler.grabDomainResource(operationExecutor).getChildren(HOST).iterator().next());
                  }
  
                  @Override
                  public ModelNode resolveSubsystemVersions(ModelNode extensions) {
                      return resolveSubsystems(extensions.asList());
                  }
  
                  @Override
                  public boolean applyDomainModel(final List<ModelNode> bootOperations) {
                      // Apply the model..
                      final HostInfo info = HostInfo.fromModelNode(createLocalHostInfo());
                      return applyRemoteDomainModel(bootOperations, info);
                  }
  
                  @Override
                  public void registrationComplete(ManagementChannelHandler handler) {
                      RemoteDomainConnectionService.this.domainConfigAvailable.set(true);
                  }
              }, runningMode);
              // Setup the management channel handler
              handler = connection.getChannelHandler();
              handler.getAttachments().attach(ManagementChannelHandler.TEMP_DIR, tempDir);
          } catch (Exception e) {
              throw new StartException(e);
          } finally {
              futureClient.setClient(this);
          }
          this.connection = connection;
          this.handler = handler;
      }