@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(); } } } }
static boolean waitForStandalone( final Process process, final ModelControllerClient client, final long startupTimeout) throws InterruptedException, IOException { long timeout = startupTimeout * 1000; final long sleep = 100L; while (timeout > 0) { long before = System.currentTimeMillis(); if (isStandaloneRunning(client)) return true; timeout -= (System.currentTimeMillis() - before); if (ProcessHelper.processHasDied(process)) { return false; } TimeUnit.MILLISECONDS.sleep(sleep); timeout -= sleep; } return false; }
private void cleanUp() { try { if (client != null) try { client.close(); } catch (Exception ignore) { } finally { client = null; } try { ProcessHelper.destroyProcess(currentProcess); } catch (InterruptedException ignore) { } } finally { servers.clear(); currentProcess = null; } }
static boolean waitForDomain( final Process process, final DomainClient client, final Map<ServerIdentity, ServerStatus> servers, final long startupTimeout) throws InterruptedException, IOException { long timeout = startupTimeout * 1000; final long sleep = 100; while (timeout > 0) { long before = System.currentTimeMillis(); if (isDomainRunning(client, servers)) { return true; } timeout -= (System.currentTimeMillis() - before); if (ProcessHelper.processHasDied(process)) { return false; } TimeUnit.MILLISECONDS.sleep(sleep); timeout -= sleep; } return false; }