Spec-Zone.ru › OpenJDK 25

Класс UnicastRemoteObject

java.lang.Object
java.rmi.server.RemoteObject
java.rmi.server.RemoteServer
java.rmi.server.UnicastRemoteObject
Все реализуемые интерфейсы:
Serializable, Remote
public class UnicastRemoteObject extends RemoteServer
Используется для экспорта удалённого объекта с помощью JRMP и получения заглушки, взаимодействующей с удалённым объектом. Заглушки создаются во время выполнения с использованием динамических прокси-объектов.

Устарело: статические заглушки. Поддержка статически созданных заглушек объявлена устаревшей. Это касается API данного класса, требующего использования статических заглушек, а также поддержки их загрузки во время выполнения. Предпочтительно динамически создавать заглушки, используя один из перечисленных ниже способов экспорта объектов, не объявленных устаревшими.

Существует восемь способов экспорта удалённых объектов:

  1. Наследование от UnicastRemoteObject и вызов конструктора UnicastRemoteObject().
  2. Наследование от UnicastRemoteObject и вызов конструктора UnicastRemoteObject(port).
  3. Наследование от UnicastRemoteObject и вызов конструктора UnicastRemoteObject(port, csf, ssf).
  4. Вызов метода exportObject(Remote). Устарело.
  5. Вызов метода exportObject(Remote, port).
  6. Вызов метода exportObject(Remote, port, csf, ssf).
  7. Вызов метода exportObject(Remote, port, filter).
  8. Вызов метода 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

Краткое описание конструкторов

UnicastRemoteObject()
UnicastRemoteObject(int port)
UnicastRemoteObject(int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)
Модификатор Конструктор Описание
protected
Создаёт и экспортирует новый объект UnicastRemoteObject, используя анонимный порт.
protected
Создаёт и экспортирует новый объект UnicastRemoteObject, используя указанный порт.
protected
Создаёт и экспортирует новый объект 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.

Методы, объявленные в классе RemoteServer

getClientHost, getLog, setLog

Методы, объявленные в классе RemoteObject

equals, getRef, hashCode, toString, toStub

Методы, объявленные в классе 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

Сообщить об ошибке или предложить улучшение
Дополнительные справочные материалы по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API