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


8.3 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)V
64-разрядное значение хэш-функции является составом с прямым порядком байтов восьмибайтовой последовательности, где первые четыре байта являются первым 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, состоя из следующих элементов:

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

Метод invoke(RemoteCall) выполняет удаленный вызов. invoke повысит любые "пользовательские" исключения, которые должны пройти и не быть пойманы тупиком. Если какое-либо исключение повышается во время удаленного вызова, invoke должен заботиться об очистке соединения прежде, чем повысить "пользовательское исключение" или RemoteException.

Метод done позволяет удаленной ссылке очищать (или повторное использование) соединение. done должен только быть вызван если invoke вызовите возвраты успешно (неисключительно) к тупику.

Метод getRefClass возвращает квалифицированное к непакету имя класса ссылочного типа, который будет сериализирован на поток.

Метод remoteHashCode возвращает хэш-код для удаленного объекта. У двух тупиков удаленного объекта, которые обращаются к тому же самому удаленному объекту, будет тот же самый хэш-код (чтобы поддерживать удаленные объекты как ключи в хеш-таблицах). A RemoteObject вперед звонок в hashCode метод к remoteHashCode метод удаленной ссылки.

Метод remoteEquals сравнивает два удаленных объекта для равенства. Два удаленных объекта равны, если они обращаются к тому же самому удаленному объекту. Например, два тупика равны, если они обращаются к тому же самому удаленному объекту. A RemoteObject вперед звонок в equals метод к remoteEquals метод удаленной ссылки.

Метод remoteToString возвраты a String это представляет ссылку этого удаленного объекта.



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