@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();
       }
     }
   }
 }