Spec-Zone.ru › OpenJDK 27

Класс 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
Модификатор и тип Поле Описание
protected RemoteRef 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
Модификатор и тип Метод Описание
static String getClientHost()
Возвращает строковое представление хоста клиента для вызова удалённого метода, обрабатываемого в текущем потоке.
static PrintStream getLog()
Возвращает поток для журнала вызовов RMI.
static void setLog(OutputStream out)
Записывает вызовы RMI в выходной поток out.

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

equals, getRef, hashCode, toString, toStub
Модификатор и тип Метод Описание
boolean equals(Object obj)
Сравнивает два удалённых объекта на равенство.
RemoteRef getRef()
Возвращает удалённую ссылку для удалённого объекта.
int hashCode()
Возвращает хеш-код удалённого объекта.
String toString()
Возвращает строку, представляющую значение этого удалённого объекта.
static Remote toStub(Remote obj)
Возвращает заглушку для удалённого объекта obj, переданного в качестве параметра.

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

finalize, getClass, notify, notifyAll, wait, wait, wait
Модификатор и тип Метод Описание
protected void finalize()
Устарело, подлежит удалению: этот элемент API может быть удалён в будущей версии.
Финализация объявлена устаревшей и подлежит удалению в одном из будущих выпусков.
final Class<?> getClass()
Возвращает класс среды выполнения для этого Object.
final void notify()
Пробуждает один поток, ожидающий на мониторе этого объекта.
final void notifyAll()
Пробуждает все потоки, ожидающие на мониторе этого объекта.
final void wait()
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания.
final void wait(long timeoutMillis)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени.
final void wait(long timeoutMillis, int nanos)
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени.

Подробное описание конструкторов

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, 2026, 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.

Spec-Zone.ru

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