Пакет 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
- См. также:
| Класс | Описание |
|---|---|
| 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. |
© 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