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

У меня есть требование, что клиент RMI должен зарегистрировать все удаленные объекты в удаленном реестре RMI.

Первый вопрос, я знаю, что есть метод registry.list(), который возвращает все имена объектов. Однако, как я могу получить объекты именно того типа, который я хочу (реализуя интерфейс, который я хочу), предполагается, что есть и другие виды зарегистрированных объектов. Должен ли я пройти по именам и использовать оператор try / catch, пытаясь создать экземпляр каждого удаленного объекта?

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

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

1 ответ

Решение

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

По телефону Naming.list() или же Registry.list().

У меня есть требование, что клиент RMI должен зарегистрировать все удаленные объекты в удаленном реестре RMI.

Смотри выше.

Как получить объекты именно того типа, который я хочу (реализуя интерфейс, который я хочу), предполагая, что существуют также другие типы объектов, зарегистрированных также? Должен ли я пройти по именам и использовать оператор try / catch, пытаясь создать экземпляр каждого удаленного объекта?

Просто пройдите имена, возвращенные list(); lookup() каждый; и использовать instanceof чтобы определить, принадлежит ли вам этот тип. Если Реестр содержит заглушки, для которых у вас нет всех необходимых классов на клиенте, вам нужно поймать ClassNotFoundException, Простой способ сделать все это за несколько шагов - через JNDI listBindings() метод.

Второй вопрос, как клиент может быть замечен, если новый объект зарегистрирован?

Не может Для Реестра RMI не определена система прослушивателей. Клиенту придется опросить.

По моему требованию серверы будут динамически регистрировать новые объекты в реестре, и клиент должен обновляться и быстрее получать доступ к новым объектам. Должен ли я просто использовать поток, чтобы периодически перечислять все имена, чтобы найти новые объекты?

Да.

Обратите внимание, что удаленные объекты должны быть экспортированы из разных узлов, но не из одного узла.

Вы найдете это трудно организовать, так как вы можете только позвонить bind() и друзья с того же хоста, что и реестр. Вам придется организовать несколько промежуточных удаленных объектов, чтобы выполнить регистрацию для каждого нелокального узла.

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

Быть из того же узла не является предварительным условием для этого. Вы можете выполнять обратные вызовы RMI в любой топологии, где брандмауэры не мешают.

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