Spec-Zone .ru
спецификации, руководства, описания, API
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT Java Удаленный Вызов метода


10.3 Использование RMI Объектной Сериализации

Вызовите и возвратитесь, данные в вызовах RMI форматируются, используя протокол Сериализации Объекта Java. CallData каждого вызова метода пишется потоку вывода объекта Java, который содержит ObjectIdentifier (цель вызова), Работа (число, представляющее метод, который будет вызван), Хеш (число, которое проверяет, что клиентский тупик и скелет удаленного объекта используют тот же самый тупиковый протокол), сопровождаемый списком нуля или большего количества Параметров за вызов.

В тупиковом протоколе JDK1.1 Работа представляет число метода как присвоено rmic, и Хеш был хешем тупика/скелета, который является интерфейсным хешем тупика. С Java 2 тупиковых протокола (Java 2 тупика сгенерированы, используя -v1.2 опция с rmic), у Работы есть значение-1, и Хеш является хешем, представляющим метод, чтобы вызвать. Хеш описывается в разделе" RemoteRef Интерфейс".

CallData:

Хеш Работы ObjectIdentifier Argumentsopt

ObjectIdentifier:

ObjectNumber UniqueIdentifier

UniqueIdentifier:

Время числа граф

Параметры:

Значение

Значение параметров

Значение:

Объект

Примитивный

ReturnValue вызова RMI состоит из кода возврата, чтобы указать или на нормальный или исключительный возврат, UniqueIdentifier, чтобы тегировать возвращаемое значение (имел обыкновение отправлять a DGCAck в случае необходимости) сопровождаемый результатом возврата: или Значение возвратилось или выданное Исключение.

ReturnValue:

0x01 UniqueIdentifier Valueopt

0x02 Исключение UniqueIdentifier

Отметьте - ObjectIdentifier, UniqueIdentifier, и EndpointIdentifier не выписываются, используя сериализацию по умолчанию, но каждый использует ее собственный специальный метод записи (это не writeObject метод, используемый объектной сериализацией); метод записи для каждого типа идентификатора добавляет свои компонентные данные последовательно к потоку вывода.

10.3.1 Аннотация класса и Загрузка Класса

RMI переопределяет annotateClass и resolveClass методы ObjectOutputStream и ObjectInputStream соответственно. Каждый класс аннотируется кодовой базой URL (расположение, из которого класс может быть загружен). В annotateClass метод, classloader, который загрузил класс, запрашивается для его кодовой базы URL. Если classloader не -null и classloader имеет не -null кодовая база, тогда кодовая база пишется потоку, используя ObjectOutputStream.writeObject метод; иначе a null пишется потоку, используя writeObject метод. Отметьте: как оптимизация, классы в"java"пакет не аннотируется, так как они всегда доступны получателю.

Аннотация класса разрешается во время десериализации, используя ObjectInputStream.resolveClass метод. resolveClass метод первые чтения аннотация через ObjectInputStream.readObject метод. Если аннотация, кодовая база URL, не -null, тогда это получает classloader для того, что URL и пытается загрузить класс. Класс загружается при использовании a java.net.URLConnection выбирать байты класса (тот же самый механизм, используемый апплетом веб-браузера classloader).



СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT
Авторское право © 1997, 2010, Oracle и/или его филиалы. Все права защищены.