public RemoteTestRunnerController create(final int workerId, final ParallelJUnitTaskConfig config)
{
final ServerSocket serverSocket = createServerSocket();
final Future<SocketConnection> connectionFuture = executorService.submit(connectionEstablisherFactory.create(serverSocket));
final ManagedProcess jvmProcess = managedProcessFactory.create(workerId, config, serverSocket.getLocalPort());
final SocketConnection socketConnection = waitForSocketConnection(connectionFuture);
return new RemoteTestRunnerController(jvmProcess, socketConnection, testSpecificationFactory);
}