Spec-Zone.ru › OpenJDK 24

Класс 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 Socket Factories в спецификации Java RMI.
С:
1.1
См. также:
  • Сериализованная форма

Краткое описание полей

Поля, объявленные в классе java.rmi.server.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.

Методы, объявленные в классе 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, 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://download.java.net/java/early_access/jdk24/docs/api/java.rmi/java/rmi/server/UnicastRemoteObject.html

Spec-Zone.ru

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