2016-04-07 5 views
1

Хотя я привязываю свои серверы к реестру RMI, поэтому клиенты могут искать сервис из источника, который всем известен, мне нужно знать немного больше о механизме RMI, потому что я не хотят использовать реестр в будущем, когда мои клиенты должны иметь возможность создать UnicastRemoteObject (или его подкласс) для конкретного сервера, с которым они хотят связаться.Создание RMI-заглушки на клиенте

Я чувствую, что этот вопрос может иметь очевидный ответ, но я действительно был бы благодарен, если бы кто-нибудь мог вести меня, хотя шаги. Что нужно знать клиенту для создания заглушки и использования удаленного сервиса?

Итак, у меня есть сервер на одном устройстве, и у меня есть клиент, который хочет использовать эту услугу. Объект сервера был экспортирован, но не был зарегистрирован в каталоге в местоположении, известном как серверу, так и клиенту. Может ли клиент сам создать заглушку, а не использовать тот, который был экспортирован сервером? Какая информация нужна серверу для создания заглушки? IP-адрес сервера? Порт? Что еще? Как мне собрать всю эту информацию для создания заглушки?

Я не хочу использовать реестр, потому что использование реестра слишком централизовано. На самом деле у меня есть кластер устройств, которые действуют как клиенты и серверы, где эти устройства предоставляют и используют одну и ту же услугу. Каждое устройство представляет собой собственный автономный нейрон, и вместе они функционируют как нервная система.

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

Без регистрации первый член для включения не-члена выполняется так «вручную». Я предполагаю, что этому ручному процессу будет помогать, когда запускается устройство, не являющееся членом, и устройство, не являющееся членом, позволяет оператору знать (через некоторый дисплей) параметры, которые должны использоваться для создания заглушки, которая позволяла бы первому членному устройству участвовать Это.

ответ

0

«Создать UnicastRemoteObject для конкретного сервера» не имеет смысла. Каждый раз, когда вы его создаете, он запускается на локальном хосте. [Существует исключение, но в данном случае оно не применяется.]

Может ли клиент самостоятельно создать заглушку, а не использовать тот, который был экспортирован сервером?

No. [Опять же есть исключение из этого, так как это именно то, что Registry.locateRegistry() делает, но он использует классы вы не в курсе, так что вы не можете.]

Вы будете иметь чтобы объяснить ваше нежелание использовать реестр для этой цели, как планировали дизайнеры RMI.

EDIT Что вы действительно ищете - это распределенный реестр. Для RMI/JRMP не существует (не может быть), но вы можете исследовать RMI/IIOP и подходящих поставщиков ORB, это мясо и напитки для них. Или используйте центральный сервер LDAP через JNDI вместо реестра.

+0

Спасибо за помощь. Я добавил дополнительную информацию к моему вопросу. Это может помочь вам лучше понять, что я пытаюсь сделать. Пожалуйста, снова просмотрите вопрос и попробуйте заполнить меня, если сможете. Благодарю. –

+0

Я добавил несколько подробностей о том, почему использование реестра нежелательно. Надеюсь, вы можете наполнить меня дополнительной информацией. Если RMI не работает для того, что я хочу, знаете ли вы о технологии на базе Java? –

+0

Хммм ... секретные классы функциональности, которые были бы хороши, если бы они были вообще доступны ... возможно, в следующей редакции спецификации RMI, некоторые из этих функций могут быть частью API. Тем временем, я полагаю, я могу запустить экземпляр реестра на устройстве, не являющемся членом, и остановить его, как только участник приобрел заглушку. Спасибо за совет. –

0

Невозможно ответить на мой собственный вопрос, но я провел немного больше исследований, и, похоже, моя проблема поддается многоадресной рассылке.

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

Хотя ссылка на примере код цитируемого Поста больше не появляется на работу, это действительно выглядит многообещающим ...

Смежные вопросы