Spec-Zone.ru › OpenJDK 25

Пакет javax.management.remote.rmi

package javax.management.remote.rmi

Коннектор RMI — это коннектор для JMX Remote API, использующий RMI для передачи запросов клиента удалённому серверу MBean. Этот пакет определяет классы, на которые пользователю коннектора RMI необходимо ссылаться напрямую как на стороне клиента, так и на стороне сервера. Он также определяет некоторые классы, на которые пользователю обычно не требуется ссылаться напрямую, но которые должны быть определены, чтобы различные реализации коннектора RMI могли взаимодействовать друг с другом.

Коннектор RMI поддерживает транспорт JRMP для RMI.

Как и большинство коннекторов в JMX Remote API, коннектор RMI обычно имеет адрес, представляющий собой JMXServiceURL. Часть адреса, задающая протокол, — rmi для коннектора, использующего транспорт RMI по умолчанию (JRMP).

Существует две формы адресов коннектора RMI:

  • В форме JNDI URL указывает, где найти заглушку RMI для коннектора. Эта заглушка RMI — объект Java типа RMIServer, предоставляющий удалённый доступ к серверу коннектора. При использовании этой формы адреса заглушка RMI извлекается из внешней записи каталога, указанной в URL. Внешний каталог — это любой каталог, распознаваемый JNDI, обычно реестр RMI, LDAP или COS Naming.
  • В закодированной форме URL непосредственно содержит сведения, необходимые для подключения к серверу коннектора. При использовании RMI/JRMP закодированная форма представляет собой сериализованную заглушку RMI для объекта сервера, закодированную с помощью BASE64 без встроенных символов новой строки.

Подробнее об адресах рассказывается ниже.

Создание сервера коннектора RMI

Обычно сервер коннектора RMI создают, передавая адрес коннектора RMI методу JMXConnectorServerFactory.newJMXConnectorServer. Сервер MBean, к которому подключён сервер коннектора, можно указать параметром этого метода. В качестве альтернативы сервер коннектора можно зарегистрировать как MBean на этом сервере MBean.

Сервер коннектора RMI также можно создать, явно сконструировав экземпляр RMIConnectorServer или воспользовавшись методом createMBean сервера MBean.

Выбор транспорта RMI

Вы можете выбрать транспорт RMI, указав rmi в части protocol адреса serviceURL при создании сервера коннектора. Также можно создать специализированные серверы коннекторов, создав экземпляр подходящего подкласса RMIServerImpl и передав его конструктору RMIConnectorServer.

Адреса коннектора, создаваемые сервером

Если указанный вами serviceURL имеет пустой путь URL (после необязательных узла и порта) или вы не указали serviceURL, сервер коннектора сформирует новый JMXServiceURL, который клиенты смогут использовать для подключения:

  • Если serviceURL выглядит следующим образом:

    service:jmx:rmi://host:port
    

    сервер коннектора создаст RMIJRMPServerImpl, а возвращённый JMXServiceURL будет выглядеть следующим образом:

    service:jmx:rmi://host:port/stub/XXXX
    

    где XXXX — сериализованная форма заглушки для созданного объекта, закодированная в BASE64 без символов новой строки.

  • Если serviceURL отсутствует, необходимо предоставить RMIServerImpl. Сервер коннектора создаст JMXServiceURL, используя форму rmi.

Элемент host в предоставленном пользователем serviceURL является необязательным. Если он указан, то копируется в созданный JMXServiceURL, но в остальном игнорируется. Если он не указан, созданный JXMServiceURL будет содержать имя локального узла.

Элемент port в предоставленном пользователем serviceURL также является необязательным. Если он указан, то также копируется в созданный JMXServiceURL; в противном случае созданный JMXServiceURL не будет иметь порт. Для serviceURL, использующего протокол rmi, элемент port, если он указан, определяет порт, на котором должен быть экспортирован созданный удалённый объект. Иного влияния он не оказывает.

Если пользователь предоставляет RMIServerImpl, а не JMXServiceURL, созданный JMXServiceURL будет содержать имя локального узла в своей части host и не будет содержать port.

Адреса коннектора на основе записей каталога

В качестве альтернативы только что описанным создаваемым адресам адрес serviceURL, указанный при создании сервера коннектора, может задавать адрес каталога, в котором будет храниться предоставленная или созданная заглушка RMIServer. Этот адрес каталога затем используется и клиентом, и сервером.

В этом случае serviceURL имеет следующий вид:

  service:jmx:rmi://host:port/jndi/jndi-name
  

Здесь jndi-name — строка, которую можно передать методу javax.naming.InitialContext.bind.

Как обычно, элементы host и :port можно опустить.

Сервер коннектора создаст RMIServerImpl на основе протокола (rmi) и элемента port, если он указан. При запуске сервера коннектора он получит заглушку этого объекта с помощью метода toStub и сохранит объект, используя указанный jndi-name. Свойства, определённые JNDI API, обрабатываются как обычно.

Например, если JMXServiceURL имеет вид:

    service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
    
сервер коннектора создаст RMIJRMPServerImpl и сохранит его заглушку под именем JNDI
    rmi://myhost/myname
    
, что означает запись myname в реестре RMI, работающем на порту по умолчанию узла myhost. Обратите внимание, что реестр RMI допускает регистрацию только с локального узла. Поэтому в данном случае myhost должно быть именем (или одним из имён) узла, на котором работает сервер коннектора.

В этом JMXServiceURL первая часть rmi: задаёт коннектор RMI, а вторая часть rmi: задаёт реестр RMI.

Другой пример: если JMXServiceURL имеет вид:

    service:jmx:rmi://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that
    
сервер коннектора создаст RMIJRMPServerImpl и сохранит его заглушку под именем JNDI
    ldap://dirhost:9999/cn=this,ou=that
    
, что означает запись cn=this,ou=that в каталоге LDAP, работающем на порту 9999 узла dirhost.

Если JMXServiceURL имеет вид:

    service:jmx:rmi://ignoredhost/jndi/cn=this,ou=that
    
сервер коннектора создаст RMIJRMPServerImpl и сохранит его заглушку под именем JNDI
    cn=this,ou=that
    
. Чтобы этот вариант работал, JNDI API должен быть соответствующим образом настроен для получения сведений о том, какой каталог использовать.

В этих примерах сервер коннектора и его клиенты не используют имя узла ignoredhost. Его можно опустить, например:

    service:jmx:rmi:///jndi/cn=this,ou=that
    

Однако рекомендуется указывать имя узла, на котором работает сервер коннектора. Оно часто отличается от имени узла каталога.

Атрибуты сервера коннектора

При использовании транспорта JRMP по умолчанию фабрики сокетов RMI можно указать с помощью атрибутов jmx.remote.rmi.client.socket.factory и jmx.remote.rmi.server.socket.factory в environment, передаваемой конструктору RMIConnectorServer. Значения этих атрибутов должны иметь типы RMIClientSocketFactory и RMIServerSocketFactory соответственно. Эти фабрики используются при создании объектов RMI, связанных с коннектором.

Создание клиента коннектора RMI

Обычно клиент коннектора RMI создаётся с помощью JMXConnectorFactory с JMXServiceURL, у которого в качестве протокола указано rmi.

Если JMXServiceURL был создан сервером, как описано выше в разделе «Адреса коннектора, создаваемые сервером», клиенту потребуется получить его от сервера напрямую или косвенно. Обычно сервер делает JMXServiceURL доступным, сохраняя его в файле или службе поиска.

Если JMXServiceURL использует синтаксис каталога, как описано выше в разделе «Адреса коннектора на основе записей каталога», клиент может получить его описанным способом; либо клиент и сервер могут заранее знать подходящую запись каталога. Например, если сервер коннектора агента Whatsit использует запись whatsit-agent-connector в реестре RMI на узле myhost, клиенту и серверу достаточно знать, что подходящий JMXServiceURL имеет следующий вид:

  service:jmx:rmi:///jndi/rmi://myhost/whatsit-agent-connector
  

Если у вас есть заглушка RMI типа RMIServer, вы можете напрямую установить RMI-соединение, используя подходящий конструктор RMIConnector.

Динамическая загрузка кода

Если клиент или сервер коннектора RMI получает от узла-партнёра экземпляр неизвестного ему класса и для RMI-соединения активна динамическая загрузка кода, класс может быть загружен из базы кода, указанной узлом-партнёром. Подробнее об этом можно узнать в документе Руководство по Java RMI.

Версия:
1.5
См. также:
  • RFC 2045, раздел 6.8, «Кодирование содержимого для передачи Base64»
java.management
Модуль Пакет Описание
javax.management.remote
Интерфейсы для удалённого доступа к серверам MBean JMX.
Класс Описание
RMIConnection
Объект RMI, используемый для передачи запроса MBeanServer от клиента его реализации MBeanServer на стороне сервера.
RMIConnectionImpl
Реализация интерфейса RMIConnection.
RMIConnectionImpl_Stub
Удалённая заглушка RMIConnectionImpl.
RMIConnector
Подключение к удалённому коннектору RMI.
RMIConnectorServer
Сервер коннектора JMX API, создающий подключения на основе RMI для удалённых клиентов.
RMIJRMPServerImpl
Объект RMIServer, экспортируемый через JRMP и создающий подключения клиентов в виде объектов RMI, экспортируемых через JRMP.
RMIServer
Объект RMI, используемый для установки подключений к коннектору RMI.
RMIServerImpl
Объект RMI, представляющий сервер коннектора.
RMIServerImpl_Stub
Удалённая заглушка RMIServerImpl.

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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.management.rmi/javax/management/remote/rmi/package-summary.html

Spec-Zone.ru

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