Класс 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к двоичному имени корневого класса. - Класс заглушки загружается по имени с помощью загрузчика классов корневого класса. Класс заглушки должен быть открытым, должен расширять
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 в спецификации Java RMI. - Начиная с версии:
- 1.1
- См. также:
Краткое описание полей
Поля, объявленные в классе 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. |
Методы, объявленные в классе 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, 2025, 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/25/docs/api/java.rmi/java/rmi/server/UnicastRemoteObject.html