Класс UnicastRemoteObject
- Все реализованные интерфейсы:
-
Serializable,Remote
public class UnicastRemoteObject extends RemoteServer
Устаревшее: Статические заглушки. Поддержка статически сгенерированных заглушек устарела. Это включает API в этом классе, который требует использования статических заглушек, а также поддержку загрузки статических заглушек во время выполнения. Предпочтительным способом является динамическое создание заглушек, используя один из способов экспорта объектов, указанных ниже.
Существует восемь способов экспорта удаленных объектов:
- Наследование от
UnicastRemoteObjectи вызов конструктораUnicastRemoteObject(). - Наследование от
UnicastRemoteObjectи вызов конструктораUnicastRemoteObject(port). - Наследование от
UnicastRemoteObjectи вызов конструктораUnicastRemoteObject(port, csf, ssf). - Вызов метода
exportObject(Remote). Устаревшее. - Вызов метода
exportObject(Remote, port). - Вызов метода
exportObject(Remote, port, csf, ssf). - Вызов метода
exportObject(Remote, port, filter). - Вызов метода
exportObject(Remote, port, csf, ssf, filter).
Четвёртый метод, exportObject(Remote), всегда использует статически сгенерированные заглушки и устарел.
Другие методы используют следующий подход: если свойство java.rmi.server.ignoreStubClasses имеет значение true (регистронезависимо) или если статическая заглушка не найдена, заглушки генерируются динамически с использованием объектов Proxy. В противном случае используются статические заглушки.
Значение свойства java.rmi.server.ignoreStubClasses по умолчанию равно false.
Статически сгенерированные заглушки обычно предварительно генерируются из класса удалённого объекта. Статическая заглушка загружается, и создаётся экземпляр этого класса заглушки, как описано ниже.
- «Корневой класс» определяется следующим образом: если класс удалённого объекта напрямую реализует интерфейс, который расширяет
Remote, то класс удалённого объекта является корневым классом; в противном случае корневым классом является наиболее производный суперкласс удалённого объекта, который напрямую реализует интерфейс, расширяющийRemote. - Имя класса заглушки для загрузки определяется путём конкатенации бинарного имени корневого класса с суффиксом
_Stub. - Класс заглушки загружается по имени с помощью загрузчика классов корневого класса. Класс заглушки должен быть public, он должен наследоваться от
RemoteStub, он должен находиться в пакете, который экспортирован, как минимум, в модульjava.rmi, и должен иметь public конструктор, который принимает один параметр типаRemoteRef. - Наконец, создаётся экземпляр класса заглушки с помощью
RemoteRef. - Если соответствующий класс заглушки не найден, или класс заглушки не может быть загружен, или при создании экземпляра заглушки возникает проблема, будет брошено исключение
StubNotFoundException.
Динамически сгенерированные заглушки создаются путём создания экземпляра Proxy со следующими характеристиками:
- Класс прокси определяется в соответствии со спецификациями класса
Proxy, используя загрузчик классов класса удалённого объекта. - Прокси реализует все удалённые интерфейсы, реализованные классом удалённого объекта.
- Каждый удалённый интерфейс должен быть либо public и находиться в пакете, экспортированном, как минимум, в модуль
java.rmi, либо он должен находиться в пакете, открытом, как минимум, для модуляjava.rmi. - Обработчик вызовов прокси — это экземпляр
RemoteObjectInvocationHandler, созданный сRemoteRef. - Если прокси не может быть создан, будет брошено исключение
StubNotFoundException.
Экспортированные удалённые объекты получают вызовы методов от заглушек, как описано в спецификации RMI. Операция и параметры каждого вызова распаковываются с помощью настраиваемого ObjectInputStream. Если предоставлен ObjectInputFilter, который не null при экспорте объекта, он используется для фильтрации параметров во время распаковки из потока. Фильтр используется для всех вызовов и всех параметров независимо от вызываемого метода или значений параметров. Если не указан фильтр или он null для экспортированного объекта, используется ObjectInputStream фильтр по умолчанию, если таковой есть. Фильтр по умолчанию настроен с помощью ObjectInputFilter.Config.setSerialFilter. Если фильтр отклоняет любой из параметров, исключение InvalidClassException , брошенное ObjectInputStream , будет указано как причина исключения UnmarshalException.
- Примечание реализации:
- В зависимости от конструктора или статического метода, используемого для экспорта объекта,
RMISocketFactoryможет использоваться для создания сокетов. По умолчанию серверные сокеты, созданныеRMISocketFactory, слушают на всех сетевых интерфейсах. См. классRMISocketFactoryи раздел RMI Socket Factories в Спецификации Java RMI. - С:
- 1.1
- См. также:
Краткое описание полей
Поля, объявленные в классе java.rmi.server.RemoteObject
ref
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
protected |
Создаёт и экспортирует новый объект UnicastRemoteObject, используя анонимный порт. |
|
protected |
Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт. |
|
protected |
Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт и фабрики сокетов. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object |
clone() |
Возвращает клонированный удалённый объект, отличный от исходного. |
static RemoteStub |
exportObject |
Устаревший. Этот метод устарел, так как поддерживает только статические заглушки. |
static Remote |
exportObject |
Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя указанный порт. |
static Remote |
exportObject |
Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя указанный порт и фильтр. |
static Remote |
exportObject |
Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя транспорт, указанный заданной фабрикой сокетов. |
static Remote |
exportObject |
Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя транспорт, указанный заданной фабрикой сокетов и фильтр. |
static boolean |
unexportObject |
Удаляет удалённый объект, obj, из среды выполнения RMI. |
Методы, объявленные в классе java.rmi.server.RemoteServer
getClientHost, getLog, setLog
Подробное описание конструкторов
UnicastRemoteObject
protected UnicastRemoteObject() throws RemoteException
Объект экспортируется с помощью сокета сервера, созданного с помощью класса RMISocketFactory.
- Исключения:
-
RemoteException- если объект не удалось экспортировать - С момента:
- 1.1
UnicastRemoteObject
protected UnicastRemoteObject(int port) throws RemoteException
Объект экспортируется с помощью сокета сервера, созданного с помощью класса RMISocketFactory.
- Параметры:
-
port- номер порта, на котором удалённый объект получает вызовы (еслиportравно нулю, выбирается анонимный порт) - Исключения:
-
RemoteException- если объект не удалось экспортировать - С момента:
- 1.2
UnicastRemoteObject
protected UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
Любая из фабрик сокетов может быть null, в этом случае соответствующий метод создания сокета клиента или сервера из класса RMISocketFactory используется вместо неё.
- Параметры:
-
port- номер порта, на котором удалённый объект получает вызовы (еслиportравно нулю, выбирается анонимный порт) -
csf- фабрика сокетов для клиентской стороны для выполнения вызовов удалённого объекта -
ssf- фабрика сокетов для серверной стороны для получения удалённых вызовов - Исключения:
-
RemoteException- если объект не удалось экспортировать - С момента:
- 1.2
Подробное описание методов
clone
public Object clone() throws CloneNotSupportedException
- Переопределяет:
-
cloneв классеObject - Возвращает:
- новый удалённый объект
- Исключения:
-
CloneNotSupportedException- если клонирование завершилось ошибкой из-за RemoteException. - С момента:
- 1.1
- См. также:
exportObject
@Deprecated public static RemoteStub exportObject(Remote obj) throws RemoteException
exportObject(Remote, port) или exportObject(Remote, port, csf, ssf) вместо него.Объект экспортируется с помощью сокета сервера, созданного с помощью класса RMISocketFactory.
- Параметры:
-
obj- удалённый объект для экспорта - Возвращает:
- заглушка удалённого объекта
- Исключения:
-
RemoteException- если экспорт не удался - С момента:
- 1.1
exportObject
public static Remote exportObject(Remote obj, int port) throws RemoteException
Объект экспортируется с помощью сокета сервера, созданного с помощью класса RMISocketFactory.
- Параметры:
-
obj- удалённый объект для экспорта -
port- порт для экспорта объекта - Возвращает:
- заглушка удалённого объекта
- Исключения:
-
RemoteException- если экспорт не удался - С момента:
- 1.2
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf) throws RemoteException
Любая из фабрик сокетов может быть null, в этом случае соответствующий метод создания сокета клиента или сервера из класса RMISocketFactory используется вместо неё.
- Параметры:
-
obj- удалённый объект для экспорта -
port- порт для экспорта объекта -
csf- фабрика сокетов для клиентской стороны для выполнения вызовов удалённого объекта -
ssf- фабрика сокетов для серверной стороны для получения удалённых вызовов - Возвращает:
- заглушка удалённого объекта
- Исключения:
-
RemoteException- если экспорт не удался - С момента:
- 1.2
exportObject
public static Remote exportObject(Remote obj, int port, ObjectInputFilter filter) throws RemoteException
Объект экспортируется с помощью сокета сервера, созданного с помощью класса RMISocketFactory.
- Параметры:
-
obj- удалённый объект для экспорта -
port- порт для экспорта объекта -
filter- объект ObjectInputFilter, применяемый при десериализации аргументов вызова; может бытьnull - Возвращает:
- заглушка удалённого объекта
- Исключения:
-
RemoteException- если экспорт не удался - С момента:
- 9
exportObject
public static Remote exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf, ObjectInputFilter filter) throws RemoteException
Любая из фабрик сокетов может быть null, в этом случае соответствующий метод создания сокета клиента или сервера из класса RMISocketFactory используется вместо неё.
- Параметры:
-
obj- удалённый объект для экспорта -
port- порт для экспорта объекта -
csf- фабрика сокетов для клиентской стороны для выполнения вызовов удалённого объекта -
ssf- фабрика сокетов для серверной стороны для получения удалённых вызовов -
filter- объект ObjectInputFilter, применяемый при десериализации аргументов вызова; может бытьnull - Возвращает:
- заглушка удалённого объекта
- Исключения:
-
RemoteException- если экспорт не удался - С момента:
- 9
unexportObject
public static boolean unexportObject(Remote obj, boolean force) throws NoSuchObjectException
- Параметры:
-
obj- удалённый объект для анэкспорта -
force- если true, анэкспортирует объект, даже если есть ожидающие или выполняющиеся вызовы; если false, анэкспортирует объект только если нет ожидающих или выполняющихся вызовов - Возвращает:
- true, если операция выполнена успешно, false в противном случае
- Исключения:
-
NoSuchObjectException- если удалённый объект в данный момент не экспортирован - С момента:
- 1.2
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/java.rmi/java/rmi/server/UnicastRemoteObject.html