Реестр RMI существует для решения проблемы начальной загрузки RMI, которая заключается в том, что вы можете получить удаленную заглушку только через удаленный вызов метода, а для выполнения удаленного вызова метода вам нужна удаленная заглушка.Ссылка на реестр, предоставленная LocateRegistry.getRegistry()
, решает эту проблему (и используется внутри Naming.lookup()
, если вы используете этот API).[Обратите внимание, что эта заглушка не получена удаленным методом: она синтезируется локально, используя предоставленный вами порт host :.Если они не верны, вы не узнаете , пока не воспользуетесь заглушкой реестра. ]
У вас есть несколько вариантов решения проблемы начальной загрузки RMI:
Использование реестра RMI.
Использование сервера LDAP через JNDI с поставщиком LDAP.
Использование UnicastRemoteObject,
serializeзаглушка, полученная при экспорте объекта и использовании общего файла, сокета или sneakernet, чтобы сделать заглушку доступной для клиентов.
Использовать активацию RMI;сериализовать заглушку, полученную при регистрации активируемого, и распространить среди всех клиентов в файле вместе с клиентским приложением.С точки зрения распределения заглушек это намного проще, чем (3), потому что заглушка остается постоянной в течение всего срока службы приложения, тогда как в (3) вы должны перераспределять заглушку при каждом экспорте.
Вы видите, что Реестр, безусловно, самый простой вариант.Обратите внимание, что вам нужно использовать его только для решения проблемы начальной загрузки Когда у вас есть заглушка, ваши собственные удаленные методы приложения могут возвращать другие объекты: вам не нужно более одного удаленного объекта в реестре.Вы можете считать это фабрикой удаленных объектов.