2013-10-24 3 views
1

Не имея опыта работы с Java RMI, у меня есть наивный вопрос, но я все еще не уверен в ответе после поиска в Интернете.Где код, выполняемый при использовании Java RMI?

Вопрос:

Для меня есть два сценария:

Сценарий-1: Запуск программы Java с локального, во время ее выполнения, он вызывает метод из класса хранится на удаленный компьютер, тогда класс этого метода будет загружен на локальный компьютер и возобновится выполнение.

Сценарий-2: Запустите Java-программу из локальной системы, во время ее выполнения она вызывает метод из класса, хранящегося на удаленной машине, затем этот метод будет выполнен на удаленном компьютере, и результаты будут отправляется обратно на локальный компьютер. (Для этого требуется передача класса/объекта?)

Какой из них использует Java RMI? или нет?

От Wikipedia of RPC: «RPC позволяет компьютерной программе вызвать подпрограмму или процедуру для выполнения в другом адресном пространстве (обычно на другом компьютере в общей сети)», похоже, это второй сценарий.

Но в соответствии с этой статьей Reducing Data Transfer during Remote Classloading in Java RMI, похоже, это первый сценарий.

+0

Какая часть связанной бумаги заставляет вас думать, что это сценарий №2? –

+0

@StephenCST связанная бумага заставляет меня думать, что это сценарий №1, поскольку он упоминает удаленный класс загрузки (для меня, загрузка удаленного класса на локальный). – JackWM

+1

Удаленная загрузка классов не означает этого. Это означает загрузку классов (кода) из местоположения, удаленного по отношению к месту, где будет запущен код. Код перемещается к целевому объекту RMI ... не наоборот. –

ответ

0

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

+0

Требуется ли загрузка динамического класса? – JackWM

+0

@JackWM Либо это, либо развертывание всех классов, связанных как с сервером, так и с клиентом. – EJP

1

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

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

+0

Спасибо, Андрей. Так что это передача объектов, не так ли? Как насчет глобальных переменных/членов класса? – JackWM

+0

Параметры удаленного вызова метода должны быть «Serializable» и [видимыми для сервера и клиента] (http://stackoverflow.com/questions/11736347/how-to-pass-object-in-arguments-in-rmi- метод). –

+1

Идея такая же простая, как «упаковать мои параметры, передать, выполнить метод, упаковать результат и перенести его обратно». –

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