Реализация динамической заглушки прокси-сервера RMI

StackOverflow https://stackoverflow.com/questions/701672

  •  22-08-2019
  •  | 
  •  

Вопрос

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

Вопрос в том,:поскольку заглушка на самом деле является динамически генерируемым прокси-сервером, определение ее класса не было бы доступно на стороне клиента, тогда как получается, что клиент все еще может извлекать заглушку из реестра RMI?Происходит ли какая-то динамическая загрузка классов за сценой или RMI использует другой метод для обхода этого?

Это было полезно?

Решение

Java.lang.reflect.Proxy сериализуем и имеет специальную поддержку в ObjectOutputStream и ObjectInputStream.По сути, сериализуются только реализованные интерфейсы и обработчик вызова, а во время десериализации из них создается новый динамический прокси-сервер.

Другие советы

RMI действительно использует динамическую загрузку классов - путь к классу отправляется вместе с вызовом в виде "аннотации пути к классу", из которой клиент загружает класс.Вы можете посмотреть на реализацию RMI для получения дополнительной информации - она доступна как часть исходного кода JDK.В частности, классы ObjectOutputStream и RMIClassLoader.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top