Я пишу сетевое приложение, в котором у каждого Клиента есть Singleton ClientManager.
Для тестирования я хотел бы создать несколько клиентов (каждый в своей виртуальной машине / процессе) без запуска программы вручную n раз.
Следующие два вопроса по stackoverflow уже описывают, как это сделать:
Мой код основан на них, но он не работает:
- Основная программа не продолжается после вызова spawn.
- Созданный код не выполняется.
Вот полный код с использованием ProcessBuilder :
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");
}
}
Что я делаю не так ???
Btw:
- Я использую Eclipse.
- Проблема Синглтона - это упрощенный пример. Пожалуйста, не предложите создать фабрику.
Решение: HelloWorld2 не должен быть внутренним классом.