Spec-Zone.ru › OpenJDK 21

Класс 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, 2023, 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/21/docs/api/java.rmi/java/rmi/server/UnicastRemoteObject.html

Spec-Zone.ru

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