java.rmi.ConnectException: соединение отказало в хосте, когда сервер RMI является дочерним процессом клиента RMI

У меня есть две Java-программы - RMIServer и RMIClient. Все просто работает, как и ожидалось, если я запускаю их как два отдельных вызова Java. То есть

$ java -cp someclasspath server.mainserverclass &

$ java -cp someclasspath client.mainclientclass

Но в моем проекте так получилось, что мне нужна клиентская java-программа для порождения сервера и последующего подключения к нему. Я использовал оба runtime.exec() Метод и ProcessBuilder для порождения экземпляра сервера, но когда я это делаю, я получаю следующее:

.Exception in thread "main" java.rmi.ConnectException:  
    Connection refused to host: 0:0:0:0:0:0:0:1; nested exception is:

Но интересная часть заключается в том, что если вручную убить экземпляр RMIClient, RMIServer становится осиротевшим (родительский pid:1), а затем, если я запустил RMIClient, я могу нормально подключиться к потерянному серверу RMI!

Так что, похоже, когда у RMIServer и RMIClient есть отношения родитель-потомок, я не могу подключиться через RMI.

Любая помощь / указатели высоко ценится.

***** ОТВЕТ ***** (Очевидно, у меня недостаточно репутации, чтобы ответить на мой собственный вопрос:-)

Это была моя ошибка. Классы RMIServer и RMIClient были созданы в двух отдельных потоках Java. Класс RMIClient для создания экземпляра до того, как RMIServer зарегистрировал удаленный объект, и, следовательно, я получаю это исключение.

Родительско-дочерние отношения не имеют отношения к этой проблеме. Так получилось, что причиной возникновения проблемы был порядок, в котором создавались эти классы.

1 ответ

так получилось, что мне нужна клиентская java-программа для порождения сервера и последующего подключения к нему

Зачем? В этом случае вам даже не нужен RMI, не говоря уже о второй JVM. Просто создайте удаленный объект в текущей JVM и вызовите его методы напрямую.

RMI сама ничего не знает об отношениях между родителями и детьми, поэтому я бы не стал заниматься этим вопросом. Строка исключения "Соединение отказано в хосте: 0:0:0:0:0:0:0:1" крайне подозрительна. Где вы взяли заглушку для удаленного объекта? Вот откуда исходит цель подключения.

Другие вопросы по тегам