/**
  * Create a new model controller client. The client can (and should) be closed without affecting
  * other usages.
  *
  * @return the domain client
  */
 public DomainClient createDomainClient() {
   final DomainTestConnection connection = this.connection;
   if (connection == null) {
     throw new IllegalStateException();
   }
   return DomainClient.Factory.create(connection.createClient());
 }
 @Override
 public void start() {
   if (STARTED.compareAndSet(false, true)) {
     try {
       final DomainCommandBuilder commandBuilder =
           DomainCommandBuilder.of(Environment.WILDFLY_HOME)
               .setBindAddressHint("management", Environment.HOSTNAME)
               .addHostControllerJavaOption("-Djboss.management.http.port=" + Environment.PORT);
       final Process process = Launcher.of(commandBuilder).setRedirectErrorStream(true).launch();
       startConsoleConsumer(process);
       shutdownThread = ProcessHelper.addShutdownHook(process);
       client =
           DomainClient.Factory.create(
               ModelControllerClient.Factory.create(Environment.HOSTNAME, Environment.PORT));
       currentProcess = process;
       final Map<ServerIdentity, ServerStatus> servers = new HashMap<>();
       ServerHelper.waitForDomain(process, client, servers, Environment.TIMEOUT);
       this.servers.putAll(servers);
     } catch (Throwable t) {
       try {
         throw new RuntimeException("Failed to start server", t);
       } finally {
         STARTED.set(false);
         cleanUp();
       }
     }
   }
 }
 /**
  * Get a shared domain client.
  *
  * @return the domain client
  */
 public synchronized DomainClient getDomainClient() {
   return DomainClient.Factory.create(internalGetOrCreateClient());
 }