Класс 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 RemoteRef |
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 | Модификатор и тип | Метод | Описание |
|---|---|---|
static String |
getClientHost() |
Возвращает строковое представление хоста клиента для вызова удалённого метода, обрабатываемого в текущем потоке. |
static PrintStream |
getLog() |
Возвращает поток для журнала вызовов RMI. |
static void |
setLog |
Записывает вызовы RMI в выходной поток out. |
Методы, объявленные в классе RemoteObject
equals, getRef, hashCode, toString, toStub | Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
equals |
Сравнивает два удалённых объекта на равенство. |
RemoteRef |
getRef() |
Возвращает удалённую ссылку для удалённого объекта. |
int |
hashCode() |
Возвращает хеш-код удалённого объекта. |
String |
toString() |
Возвращает строку, представляющую значение этого удалённого объекта. |
static Remote |
toStub |
Возвращает заглушку для удалённого объекта 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 |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
final void |
wait |
Заставляет текущий поток ожидать пробуждения, обычно в результате вызова notify или прерывания, либо до истечения заданного промежутка реального времени. |
Подробное описание конструкторов
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.