Spec-Zone.ru › OpenJDK 24

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

package javax.management.remote.rmi

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

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

Как и большинство коннекторов в удалённом API JMX, коннектор 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. Как обычно, учитываются свойства, определённые API JNDI.

Например, если 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
      
. Для работы в этом случае API JNDI должен быть должным образом настроен для предоставления информации о используемом каталоге.

В этих примерах имя хоста 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 описывает это подробнее.

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

© 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.management.rmi/javax/management/remote/rmi/package-summary.html

Spec-Zone.ru

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