Как программно остановить сервер RMI и уведомить всех клиентов

#java #rmi

#java #rmi

Вопрос:

Я разработал приложение RMI, в котором сервер RMI должен запускаться несколько раз, а также должен останавливаться несколько раз.

  • Как я могу остановить сервер RMI, не закрывая приложение?
  • Как мне отправить уведомления всем клиентам о том, что сервер собирается остановиться?

Комментарии:

1. Проголосовавший за необъяснимое понижение. Однако вопрос лучше было бы выразить на стандартном английском.

Ответ №1:

Я не уверен, что вы имеете в виду под «сервером RMI», реестром RMI, который вы не можете остановить программно. Но вы можете остановить свой сервис (привязанный к реестру RMI). Вы должны вызвать пользовательский метод, чтобы аккуратно завершить работу вашей службы, а затем unbind удалить ее из реестра.

Перед этим завершением работы и отменой привязки вы должны сообщить всем подключенным клиентам, что служба будет закрыта. Это уведомление может быть сделано с помощью обратного вызова. Поиск RMI callback даст вам множество примеров и руководств.

Комментарии:

1. Вы можете остановить реестр, который вы создаете yourslf, с помощью createRegistry(), с помощью UnicastRemoteObject.unexportObject().

Ответ №2:

На самом деле вам не нужно отправлять уведомление. Клиенты неэкспортированного удаленного объекта получат NoSuchObjectEzception при следующем вызове удаленного метода на нем. Им просто нужно распознать ситуацию.