Класс UnicastRemoteObject
- java.lang.Object
-
- java.rmi.server.RemoteObject
-
- java.rmi.server.RemoteServer
-
- java.rmi.server.UnicastRemoteObject
- Все реализованные интерфейсы:
-
Serializable,Remote
- Прямые известные подклассы:
ActivationGroup
public class UnicastRemoteObject extends RemoteServer
Используется для экспорта удалённого объекта с JRMP и получения заглушки (stub), которая взаимодействует с удалённым объектом. Заглушки генерируются либо во время выполнения с использованием динамических прокси-объектов, либо статически во время компиляции, обычно с помощью инструмента rmic.
Устаревший: Статические заглушки. Поддержка статически сгенерированных заглушек устарела. Это включает API в этом классе, который требует использования статических заглушек, а также поддержку загрузки статических заглушек во время выполнения. Предпочтительнее генерировать заглушки динамически, используя один из способов экспорта объектов, не помеченных как устаревшие, перечисленных ниже. Не запускайте rmic для генерации статических классов заглушек. Это излишне и также устарело.
Существует восемь способов экспорта удалённых объектов:
- Наследование от
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.
Статически сгенерированные заглушки обычно предварительно генерируются из класса удалённого объекта с помощью инструмента rmic. Загружается статическая заглушка, и создаётся экземпляр этого класса заглушки, как описано ниже.
- «Корневой класс» определяется следующим образом: если класс удалённого объекта напрямую реализует интерфейс, который расширяет
Remote, то класс удалённого объекта является корневым классом; в противном случае корневой класс — это самый производный суперкласс удалённого объекта, который напрямую реализует интерфейс, расширяющийRemote. - Имя класса заглушки для загрузки определяется путём конкатенации бинарного имени корневого класса с суффиксом
_Stub. - Класс заглушки загружается по имени с помощью загрузчика классов корневого класса. Класс заглушки должен быть публичным, должен расширять
RemoteStub, должен находиться в пакете, экспортированном по крайней мере в модульjava.rmi, и должен иметь публичный конструктор с одним параметром типаRemoteRef. - Наконец, экземпляр класса заглушки создаётся с помощью
RemoteRef. - Если соответствующий класс заглушки не найден, или класс заглушки не может быть загружен, или при создании экземпляра заглушки возникает проблема, выбрасывается исключение
StubNotFoundException.
Заглушки генерируются динамически путём создания экземпляра Proxy со следующими характеристиками:
- Класс прокси определяется в соответствии со спецификациями для класса
Proxy, используя загрузчик классов класса удалённого объекта. - Прокси реализует все удалённые интерфейсы, реализованные классом удалённого объекта.
- Каждый удалённый интерфейс должен быть либо публичным и находиться в пакете, экспортированном по крайней мере в модуль
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() | Создаёт и экспортирует новый объект UnicastRemoteObject, используя анонимный порт. |
protected | UnicastRemoteObject(int port) | Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт. |
protected | UnicastRemoteObject(int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf) | Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт и фабрики сокетов. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
Object | clone() | Возвращает клонированный удалённый объект, отличающийся от оригинального. |
static RemoteStub | exportObject(Remote obj) | Устаревший. Этот метод устарел, так как он поддерживает только статические заглушки. |
static Remote | exportObject(Remote obj,
int port) | Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя указанный порт. |
static Remote | exportObject(Remote obj,
int port,
ObjectInputFilter filter) | Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя указанный порт и фильтр. |
static Remote | exportObject(Remote obj,
int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf) | Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя транспорт, заданный фабрикой сокетов. |
static Remote | exportObject(Remote obj,
int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf,
ObjectInputFilter filter) | Экспортирует удалённый объект, чтобы сделать его доступным для получения входящих вызовов, используя транспорт, заданный фабрикой сокетов и фильтр. |
static boolean | unexportObject(Remote obj,
boolean force) | Удаляет удалённый объект, obj, из среды выполнения RMI. |
Методы, объявленные в классе java.rmi.server.RemoteServer
getClientHost, getLog, setLog Методы, объявленные в классе java.rmi.server.RemoteObject
equals, getRef, hashCode, toString, toStub Методы, объявленные в классе java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait Конструкторы
UnicastRemoteObject
protected UnicastRemoteObject()
throws RemoteException Создаёт и экспортирует новый объект UnicastRemoteObject, используя анонимный порт.
Объект экспортируется с серверным сокетом, созданным с помощью класса RMISocketFactory.
- Исключения:
-
RemoteException- если не удалось экспортировать объект - С тех пор:
- 1.1
UnicastRemoteObject
protected UnicastRemoteObject(int port)
throws RemoteException Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт.
Объект экспортируется с серверным сокетом, созданным с помощью класса RMISocketFactory.
- Параметры:
-
port- номер порта, на котором удалённый объект получает вызовы (еслиportравно нулю, выбирается анонимный порт) - Исключения:
-
RemoteException- если не удалось экспортировать объект - С тех пор:
- 1.2
UnicastRemoteObject
protected UnicastRemoteObject(int port,
RMIClientSocketFactory csf,
RMIServerSocketFactory ssf)
throws RemoteException Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт и фабрики сокетов.
Любая из фабрик сокетов может быть null, в этом случае соответствующий метод создания клиентского или серверного сокета из RMISocketFactory используется вместо неё.
- Параметры:
-
port- номер порта, на котором удалённый объект получает вызовы (еслиportравно нулю, выбирается анонимный порт) -
csf- фабрика сокетов для клиентской стороны для совершения вызовов удалённому объекту -
ssf- фабрика сокетов для серверной стороны для получения удалённых вызовов - Исключения:
-
RemoteException- если не удалось экспортировать объект - С тех пор:
- 1.2
Методы
clone
public Object clone()
throws CloneNotSupportedException Возвращает копию удалённого объекта, отличного от оригинала.
- Переопределяет:
-
cloneв классеObject - Возвращает:
- новый удалённый объект
- Исключения:
-
CloneNotSupportedException- если клонирование не удалось из-за RemoteException. - С тех пор:
- 1.1
- См. также:
Cloneable
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, из среды выполнения RMI. При успехе объект больше не может принимать входящие вызовы RMI. Если параметр force равен true, объект принудительно разэкспортируется, даже если есть ожидающие вызовы удалённому объекту или удалённый объект всё ещё имеет в процессе вызовы. Если параметр force равен false, объект разэкспортируется только если нет ожидающих или выполняющихся вызовов объекту.
- Параметры:
-
obj- удалённый объект, который нужно разэкспортировать -
force- если true, разэкспортирует объект, даже если есть ожидающие или выполняющиеся вызовы; если false, разэкспортирует объект только если нет ожидающих или выполняющихся вызовов - Возвращает:
- true, если операция успешна, false в противном случае
- Исключения:
-
NoSuchObjectException- если удалённый объект в данный момент не экспортирован - С тех пор:
- 1.2
© 1993, 2020, 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/11/docs/api/java.rmi/java/rmi/server/UnicastRemoteObject.html