В чем именно заключается смысл кодовой базы в Java RMI?


В настоящее время я изучаю RMI.

Я действительно не понимаю концепцию кодовой базы. Каждая статья, которую я читаю, предполагает, что клиент, который вызывает удаленный объект, может загрузить определения метода из кодовой базы. Проблема теперь в следующем:мне все равно не нужны описания/интерфейсы в моем пути к классу? Как я могу вызывать методы на удаленном объекте, если я знаю их только во время выполнения? Это даже не компилируется.

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

Спасибо

1 3

1 ответ:

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

Это сделает клиент очень тонким, и вы очень легко обновите свои классы в базе кода, не прибегая к обновлению каждого отдельного клиента.

EDIT

Допустим, у вас есть сервер RMI со следующим интерфейсом

public interface MiddleEarth {
     public List<Creature> getAllCreatures();
}

Клиент будет иметь только интерфейсы для MiddleEarth и Creature, но ни одна из реализаций в пути к классу.

, где реализации Creature являются сериализуемыми объектами типа Elf, Man, Dwarf и Hobbit. И эти реализации находятся в вашей кодовой базе, но не в пути к классу вашего клиента.

Когда вы попросите ваш сервер RMI отправить вам список всех существ в Средиземье, он отправит объекты, которые реализуют Creature, то есть любой из классов, перечисленных выше.

Когда клиент получает сериализованные объекты, он должен искать файлы классов, чтобы десериализовать их, но они не расположены в локальном пути к классу. Каждый объект в этом потоке идет маркировка с заданной базой кода, которую можно использовать для поиска недостающих классов. Поэтому клиент обращается к базе кода для поиска этих классов. Там он найдет фактические классы существ, которые используются.

Кодовая база работает в обоих направлениях, поэтому это означает, что если вы отправите вашему серверу a Creature (то есть an Ent), он также будет искать его в базе кода.

Это означает, что когда и клиент, и сервер должны публиковать новые типы существ все они должны сделать это, чтобы обновить creaturesImpl.jar в базе кода, и ничего в самих серверных или клиентских приложениях.