2015-09-15 7 views
0

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

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

Не могли бы вы объяснить немного больше. Ваш код кажется хорошим. Что вы ожидаете. –

+0

Просто, мне нужно запустить мой сервер после выключения его много раз. Впервые я запустил сервер и закрыл его, он отлично работает. После того, как он отключил сервер и попытался запустить его снова с тем же портом и одним и тем же удаленным объектом и одним и тем же ключом «LibraryServer», он дал мне это исключение. – ccc

ответ

1

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

Исправить.

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

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

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

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

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

-1

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

UnicastRemoteObject.unexportObject(serverReg, false); 
+0

Вы неправильно поняли. 'unbind()' удаляет объект из реестра. 'unexportObject()' не экспортирует объект. Это не одно и то же. – EJP