ProcessBuilder - Inicie outro processo / JVM - HowTo?
Estou escrevendo um aplicativo de rede, onde cada cliente possui um Singleton ClientManager. ParaTestando, Gostaria de criar vários clientes (cada um em sua própria VM / processo) sem iniciar o programa manualmente n-times.
As duas perguntas a seguir sobre stackoverflow já descrevem como fazer isso:
Éesta realmente a melhor maneira de iniciar uma segunda JVM a partir do código Java?Java: Executando um aplicativo Java em um processo separadoMeu código é baseado neles, mas não está funcionando:
O programa principal não continua depois que a desova é chamada.O código gerado não é executado.Aqui está o código completo usandoProcessBuilder:
public class NewVM {
static class HelloWorld2 {
public static void main(String[] args) {
System.out.println("Hello World");
System.err.println("Hello World 2");
}
}
public static void main(String[] args) throws Exception {
startSecondJVM(HelloWorld2.class, true);
startSecondJVM(HelloWorld2.class, false);
System.out.println("Main");
}
public static void startSecondJVM(Class<? extends Object> clazz, boolean redirectStream) throws Exception {
System.out.println(clazz.getCanonicalName());
String separator = System.getProperty("file.separator");
String classpath = System.getProperty("java.class.path");
String path = System.getProperty("java.home")
+ separator + "bin" + separator + "java";
ProcessBuilder processBuilder =
new ProcessBuilder(path, "-cp",
classpath,
clazz.getCanonicalName());
processBuilder.redirectErrorStream(redirectStream);
Process process = processBuilder.start();
process.waitFor();
System.out.println("Fin");
}
}
O que estou fazendo errado???
Btw:
Estou usando o Eclipse.O problema de Singleton é umsimplificado exemplo. Por favor façanão sugerir a criação de uma fábrica.Solução: HelloWorld2 não deve ser uma classe interna.