Spec-Zone.ru › OpenJDK 17

Пакет 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 URL при создании сервера подключателя. Вы также можете создать специализированные серверы подключателей, создав экземпляр соответствующего подкласса 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
See Also:
  • RFC 2045, раздел 6.8, «Кодирование содержимого BASE64 в заголовке Content-Transfer-Encoding»
END_OF_DOCUMENT_MARKER
java.management
Модуль Пакет Описание
javax.management.remote
Интерфейсы для удаленного доступа к серверам JMX MBean.
Класс Описание
RMIConnection
Объект RMI, используемый для переадресации запроса MBeanServer от клиента к его реализации MBeanServer на стороне сервера.
RMIConnectionImpl
Реализация интерфейса RMIConnection.
RMIConnectionImpl_Stub
Удаленный заглушка RMIConnectionImpl.
RMIConnector
Подключение к удаленному RMI-коннектору.
RMIConnectorServer
Сервер-коннектор API JMX, создающий RMI-подключения от удалённых клиентов.
RMIIIOPServerImpl Устаревший.
Этот транспорт больше не поддерживается.
RMIJRMPServerImpl
Объект RMIServer, экспортируемый через JRMP и создающий подключения клиентов как объекты RMI, экспортируемые через JRMP.
RMIServer
Объект RMI, используемый для установления подключений к RMI-коннектору.
RMIServerImpl
Объект RMI, представляющий сервер-коннектор.
RMIServerImpl_Stub
Удаленный заглушка RMIServerImpl.

© 1993, 2021, 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/17/docs/api/java.management.rmi/javax/management/remote/rmi/package-summary.html

Spec-Zone.ru

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