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


5.3 UnicastRemoteObject Класс

Класс java.rmi.server.UnicastRemoteObject оказывает поддержку для создания и экспорта удаленных объектов. Класс реализует объект удаленного сервера со следующими характеристиками:
package java.rmi.server;

public class UnicastRemoteObject extends RemoteServer {

        protected UnicastRemoteObject()
                throws java.rmi.RemoteException {...}
        protected UnicastRemoteObject(int port)
                throws java.rmi.RemoteException {...}
        protected UnicastRemoteObject(int port, 
                                      RMIClientSocketFactory csf,
                                      RMIServerSocketFactory ssf)
                throws java.rmi.RemoteException {...}

        public Object clone()
                throws java.lang.CloneNotSupportedException {...}
        public static RemoteStub exportObject(java.rmi.Remote obj)
                throws java.rmi.RemoteException {...}
        public static Remote exportObject(java.rmi.Remote obj, int port)
                throws java.rmi.RemoteException {...}
        public static Remote exportObject(Remote obj, int port,
                                          RMIClientSocketFactory csf,
                                          RMIServerSocketFactory ssf)
                throws java.rmi.RemoteException {...}
        public static boolean unexportObject(java.rmi.Remote obj,
                                             boolean force)
                throws java.rmi.NoSuchObjectException {...}
}



5.3.1 Построение Нового Удаленного объекта

Реализация удаленного объекта (тот, который реализует один или более удаленные интерфейсы) должна быть создана и экспортирована. Экспорт удаленного объекта делает тот объект доступным, чтобы принять входящие вызовы от клиентов. Для реализации удаленного объекта, которая экспортируется как a UnicastRemoteObject, экспорт включает слушание на порту TCP (отметьте, что больше чем один удаленный объект может признать, что входящие вызовы на том же самом порту, таким образом слушая на новом порту не всегда необходимы). Реализация удаленного объекта может расширить класс UnicastRemoteObject чтобы использовать его конструкторов, которые экспортируют объект, или он может расширить некоторый другой класс (или ни один вообще) и экспортировать объект через UnicastRemoteObject's exportObject методы.

Никакой конструктор параметра не создает и экспортирует удаленный объект на анонимном (или произвольный) порт, выбранный во время выполнения. Вторая форма конструктора берет единственный параметр, порт, который определяет номер порта, на котором удаленный объект принимает входящие вызовы. Третий конструктор создает и экспортирует удаленный объект, который принимает входящие вызовы на указанном порту через a ServerSocket создаваемый из RMIServerSocketFactory; клиенты сделают соединения с удаленным объектом через Sockets предоставленный от RMIClientSocketFactory.


5.3.2 Экспорт Реализации, Не Расширенной От RemoteObject

 exportObject метод (любая из форм) используется, чтобы экспортировать простой одноранговый удаленный объект, который не реализуется, расширяясь UnicastRemoteObject класс. Первая форма exportObject метод берет единственный параметр, obj, который является удаленным объектом, который примет входящие вызовы RMI; это exportObject метод экспортирует объект на анонимном (или произвольный) порт, выбранный во время выполнения. Второе exportObject метод берет два параметра, и удаленный объект, obj, и порт, номер порта, на котором удаленный объект принимает входящие вызовы. Третье exportObject метод экспортирует объект, obj, с указанным RMIClientSocketFactory, csf, и RMIServerSocketFactory, ssf, на указанном порту.

exportObject метод возвращает a Remote тупик, который является тупиковым объектом для удаленного объекта, obj, это передают вместо удаленного объекта в вызове RMI.


5.3.3 Передача a UnicastRemoteObject в Вызове RMI

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


5.3.4 Сериализация a UnicastRemoteObject

Информация, содержавшаяся в UnicastRemoteObject переходный процесс и не сохраняется, если объект того типа пишется определяемому пользователем ObjectOutputStream (например, если объект пишется файлу, используя сериализацию). Объект, который является экземпляром определяемого пользователем подкласса UnicastRemoteObject, однако, может иметь нетекущие данные, которые могут быть сохранены, когда объект сериализируется.

Когда a UnicastRemoteObject читается из ObjectInputStream использование UnicastRemoteObject's readObject метод, удаленный объект автоматически экспортируется во время выполнения RMI так, чтобы это могло получить вызовы RMI. Если экспорт объектных сбоев по некоторым причинам, десериализация объекта завершатся с исключением.


5.3.5 Неэкспорт a UnicastRemoteObject

unexportObject метод делает удаленный объект, obj, недоступным входящим вызовам. Если параметр силы является истиной, объект насильственно неэкспортируется, даже если там ожидают, призывает к удаленному объекту, или у удаленного объекта все еще есть происходящие вызовы. Если параметр силы является ложью, объект только неэкспортируется, если нет никакого ожидания, или происходящий призывает к объекту. Если объект успешно неэкспортируется, время выполнения RMI удаляет объект из своих внутренних таблиц. Неэкспорт объекта этим насильственным способом может оставить клиенты, содержащие устарелые удаленные ссылки на удаленный объект. Этот метод броски java.rmi.NoSuchObjectException если объект ранее не экспортировался во время выполнения RMI.


5.3.6 clone метод

Объекты являются только clonable использованием механизма языка программирования Java по умолчанию, если они поддерживают java.lang.Cloneable интерфейс. Класс java.rmi.server.UnicastRemoteObject не реализует этот интерфейс, но действительно реализует clone метод так, чтобы, если подклассы должны реализовать Cloneable, удаленный объект будет способен к тому, чтобы быть клонированным должным образом. clone метод может использоваться подклассом, чтобы создать клонированный удаленный объект с первоначально тем же самым содержанием, но экспортируется, чтобы принять удаленные вызовы и отличен от исходного объекта.



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