Как я могу удалить удаленный объект из среды выполнения RMI

Когда я закрываю серверную программу RMI с помощью serverReg.unbind("LibraryServer");, она удаляет только привязку удаленного объекта и его ключ 'LibraryServer. Если я запускаю сервер в то же время, это дает мне исключение ObjID already in use. Как я могу полностью удалить удаленный объект из реестра? Оператор привязки удаленного объекта и его ключ,

serverReg.rebind("LibraryServer", new RemoteFactoryImpl());

person ccc    schedule 15.09.2015    source источник
comment
Не могли бы вы объяснить немного больше .. Ваш код кажется хорошим. Что вы ожидаете.   -  person Siva Kumar    schedule 15.09.2015
comment
Просто мне нужно запустить свой сервер после его многократного выключения. Впервые запустил сервер и выключил, все работает. После выключения сервера и попытки запустить его снова с тем же портом, тем же удаленным объектом и тем же ключом LibraryServer это дало мне это исключение.   -  person ccc    schedule 15.09.2015


Ответы (2)


Когда я закрываю серверную программу RMI с помощью serverReg.unbind("LibraryServer"); он удаляет только [привязку] удаленного объекта и его ключ «LibraryServer.

Правильный.

Если я запускаю сервер в то же время, он дает мне исключение ObjID, который уже используется.

Я хотел бы увидеть это исключение и трассировку стека.

Как я могу полностью удалить удаленный объект из реестра?

Вы уже сделали это. Возможно, вы ищете способ отменить экспорт удаленного объекта, предоставленного UnicastRemoteObject.unexportObject().

Однако на самом деле ошибка ObjID already in use может возникнуть только при попытке экспортировать другой Реестр из JVM, в которую вы уже экспортировали один. Что совершенно не соответствует вашему описанию.

person user207421    schedule 16.10.2015

Хорошо, я нашел ответ на этот вопрос, метод unbined удаляет только связь между удаленным объектом и его ключом. Таким образом, невозможно перезапустить сервер rmi с тем же удаленным объектом, потому что первый удаленный объект все еще находится в реестре. С помощью метода unexportObject класса UnicastRemoteObject можно полностью удалить удаленный объект из реестра. Я нашел его в сообщении этого.

UnicastRemoteObject.unexportObject(serverReg, false);
person ccc    schedule 15.10.2015
comment
Вы неправильно поняли. unbind() удаляет объект из реестра. unexportObject() отменяет экспорт объекта. Это не одно и то же. - person user207421; 16.10.2015