package org.jboss.as.test.integration.respawn;
import org.jboss.as.protocol.ProtocolConnectionConfiguration;
import org.jboss.remoting3.Endpoint;
import org.jboss.threads.JBossThreadFactory;
import javax.security.auth.callback.CallbackHandler;
import java.io.Closeable;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import static org.jboss.as.network.NetworkUtils.formatPossibleIpv6Address;
/**
* @author Emanuel Muckenhuber
*/
class TestControllerUtils implements Closeable {
private static final String ENDPOINT_NAME = "respawn-client-mgmt-endpoint";
private static final AtomicInteger executorCount = new AtomicInteger();
static ExecutorService createDefaultExecutor() {
final ThreadGroup group = new ThreadGroup("mgmt-client-thread");
final ThreadFactory threadFactory = new JBossThreadFactory(group, Boolean.FALSE, null, "%G " + executorCount.incrementAndGet() + "-%t", null, null);
return new ThreadPoolExecutor(4, 4, 30L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>(256), threadFactory);
}
static TestControllerUtils create(String host, int port, CallbackHandler callbackHandler) throws IOException, URISyntaxException {
return create("remote",host, port, callbackHandler);
}
static TestControllerUtils create(String scheme, String host, int port, CallbackHandler callbackHandler) throws IOException, URISyntaxException {
return create(new URI(scheme, null, formatPossibleIpv6Address(host), port, null, null, null), callbackHandler);
}
static TestControllerUtils create(URI uri, CallbackHandler callbackHandler) throws IOException {
final Endpoint endpoint = Endpoint.getCurrent();
final ProtocolConnectionConfiguration configuration = ProtocolConnectionConfiguration.create(endpoint, uri);
configuration.setCallbackHandler(callbackHandler);
return new TestControllerUtils(endpoint, configuration, createDefaultExecutor());
}
private final Endpoint endpoint;
private final ExecutorService executor;
private final ProtocolConnectionConfiguration configuration;
TestControllerUtils(Endpoint endpoint, final ProtocolConnectionConfiguration configuration, final ExecutorService executor) {
this.endpoint = endpoint;
this.executor = executor;
this.configuration = configuration;
}
public ProtocolConnectionConfiguration getConfiguration() {
return configuration;
}
public ExecutorService getExecutor() {
return executor;
}
@Override
public void close() throws IOException {
executor.shutdown();
try {
endpoint.close();
} finally {
executor.shutdownNow();
}
}
}