Spec-Zone .ru
спецификации, руководства, описания, API
|
СОДЕРЖАНИЕ | ПРЕДЫДУЩИЙ | NEXT | Java Удаленный Вызов метода |
RemoteRef
ИнтерфейсRemoteRef
представляет дескриптор для удаленного объекта. Каждый тупик содержит экземпляр RemoteRef
это содержит конкретное представление ссылки. Эта удаленная ссылка используется, чтобы выполнить удаленные запросы к удаленному объекту, для которого это - ссылка. package java.rmi.server; public interface RemoteRef extends java.io.Externalizable { Object invoke(Remote obj, java.lang.reflect.Method method, Object[] params, long opnum) throws Exception; RemoteCall newCall(RemoteObject obj, Operation[] op, int opnum, long hash) throws RemoteException; void invoke(RemoteCall call) throws Exception; void done(RemoteCall call) throws RemoteException; String getRefClass(java.io.ObjectOutput out); int remoteHashCode(); boolean remoteEquals(RemoteRef obj); String remoteToString(); }
invoke(Remote,Method,Object[],long)
метод делегирует вызов метода к тупику (obj) удаленная ссылка и позволяет ссылке заботиться об установке соединения с удаленным узлом, маршалинг некоторое представление для метода и параметров, params, затем передавая вызов метода к удаленному узлу. Этот метод или возвращает результат вызова метода на удаленном объекте, который находится на удаленном узле или бросает a RemoteException
если вызов перестал работать или исключение уровня приложения, если удаленный вызов выдает исключение. Отметьте, что число работы, opnum, представляет хеш сигнатуры метода и может использоваться, чтобы закодировать метод для передачи. Хеш метода, который будет использоваться для opnum параметра, является 64-разрядным (длинным) целым числом, вычисленным из первых двух 32-разрядных значений обзора сообщения определенного потока байтов, используя Национальный институт стандартов и технологий (NIST) Безопасный Хеш-алгоритм (SHA 1). Этот поток байтов содержит строку, как будто он был записан, используя java.io.DataOutput.writeUTF
метод, состоя из имени удаленного метода, сопровождаемого его дескриптором метода (см. Спецификацию виртуальной машины Java (JVMS) для описания дескрипторов метода).
Например, если у метода удаленного интерфейса есть следующее имя и подпись:
void myRemoteMethod(int count, Object obj, boolean flag)строка, содержащая имя удаленного метода и дескриптор, была бы следующим:
myRemoteMethod(ILjava/lang/Object;Z)V64-разрядное значение хэш-функции является составом с прямым порядком байтов восьмибайтовой последовательности, где первые четыре байта являются первым 32-разрядным значением обзора сообщения в обратном порядке байтов, и последние четыре байта являются вторым 32-разрядным значением обзора сообщения в обратном порядке байтов. Например, если первые два 32-разрядных значения обзора сообщения
0xB0B1B2B3
и 0xB4B5B6B7
, тогда значение хэш-функции было бы 0xB7B6B5B4B3B2B1B0
. newCall(RemoteObject,Operation[],int,long)
, invoke(RemoteCall)
, и done(RemoteCall)
осуждаются с Java 2 SDK, Standard Edition, v1.2. Тупики, сгенерированные rmic
больше использование 1.2 тупиковых версий протокола не использует эти методы. Последовательность вызовов, состоящих из newCall
, invoke
, и done
были заменены новым invoke
метод, который берет a Method
возразите как один из его параметров. newCall
создает соответствующий объект вызова для нового удаленного вызова метода на удаленном объекте obj. Массив работы, op, содержит доступные операции на удаленном объекте. Число работы, opnum, является индексом в массив работы, который определяет определенную работу для этого удаленного вызова. Интерфейсный хеш является 64-разрядным значением, используемым, чтобы осуществить совместимость между тупиком и скелетом, используя v1.1 тупиковый протокол. Интерфейсный хеш вычисляется из первых двух 32-разрядных значений обзора сообщения определенного потока байтов, используя SHA 1. Этот поток байтов содержит данные, как будто это было записано, используя writeInt
и writeUTF
методы интерфейса java.io.DataOutput
, состоя из следующих элементов: int
) тупиковый номер версии, всегда 1 Интерфейсное значение хэш-функции составляется из обзора сообщения тем же самым способом как описано выше для хеша метода, используемого в invoke
метод.
Метод invoke(RemoteCall)
выполняет удаленный вызов. invoke
повысит любые "пользовательские" исключения, которые должны пройти и не быть пойманы тупиком. Если какое-либо исключение повышается во время удаленного вызова, invoke
должен заботиться об очистке соединения прежде, чем повысить "пользовательское исключение" или RemoteException
.
Метод done
позволяет удаленной ссылке очищать (или повторное использование) соединение. done
должен только быть вызван если invoke
вызовите возвраты успешно (неисключительно) к тупику.
Метод getRefClass
возвращает квалифицированное к непакету имя класса ссылочного типа, который будет сериализирован на поток.
Метод remoteHashCode
возвращает хэш-код для удаленного объекта. У двух тупиков удаленного объекта, которые обращаются к тому же самому удаленному объекту, будет тот же самый хэш-код (чтобы поддерживать удаленные объекты как ключи в хеш-таблицах). A RemoteObject
вперед звонок в hashCode
метод к remoteHashCode
метод удаленной ссылки.
Метод remoteEquals
сравнивает два удаленных объекта для равенства. Два удаленных объекта равны, если они обращаются к тому же самому удаленному объекту. Например, два тупика равны, если они обращаются к тому же самому удаленному объекту. A RemoteObject
вперед звонок в equals
метод к remoteEquals
метод удаленной ссылки.
Метод remoteToString
возвраты a String
это представляет ссылку этого удаленного объекта.