Хорошо, я предположил, что URL, указанный опом, был неправильным, но оказалось, что нет. Поэтому я не могу ответить.
Тем не менее, вот основы:
Для простого подключения через jconsole
.
Если вы знаете , что JMX-сервер, к которому вы хотите подключиться, имеет порт реестра RMI на 9003, например, подключитесь с помощью
localhost:9003
вместо.
В противном случае вот что я обнаружил с нуля:
Предположим, у вас есть JMX-сервер (псевдоним «JMX-агент», псевдоним «JVM, к которому вы хотите подключиться»), работающий на «TARGET MACHINE» с портом реестра RMI в «RMI REGISTRY PORT» и порт сервера JMX RMI в «ПОРТ СЕРВЕРА JMX RMI».
Примечание:
- Реестр RMI сообщает клиентам JMX, где найти порт сервера RMI ; информацию можно получить по ключу
jmxrmi
.
- Порт реестра RMI общеизвестен, так как он задается через системные свойства при запуске JVM.
- Порт сервера RMI JMX обычно , а не , известный как JVM, выбирает его произвольно (если другие меры предосторожности не предпринимаются).
Следующий URI приведет к успеху (проверено)
service:jmx:rmi://<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Это выглядит противно. Давайте разберемся с этим.
Этот URI является RFC2609 "URL-адрес протокола расположения службы" (ну, это действительно URI, верно?)
Он состоит из:
service
- постоянная
jmx:rmi
- тип услуги , состоящий из: абстрактный тип jmx
и схема URL rmi
- остальное - сок (спецификация протокола доступа к сервису)
сок разлагается на:
//<TARGET_MACHINE>:<JMX_RMI_SERVER_PORT>
- ipsite
/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- часть URL
Хорошо информированный клиент JMX подключается к «ipsite» для обмена JMX-over-RMI; но что из клиента JMX, который не ЗНАЕТ тот порт? Patience ...
Часть URL раскладывается на:
/jndi/
- Похоже, это говорит клиенту JMX, что он может получить информацию о поиске в расположении, следующем за
rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
- Да, мы получаем информацию о сервере RMI JMX в реестре RMI под ключом поиска jmxrmi
Это что-то вроде "тележка перед лошадью", так как сначала нужно связаться с реестром RMI , заданным последним частью URL SLP.
Интуитивно почесав голову, попробуем:
service:jmx:rmi://<TARGET_MACHINE>/jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Да, это работает! Порт сервера JMX RMI хорошо получен из реестра. Если подумать, целевая машина также должна быть получена из реестра, таким образом:
service:jmx:rmi:///jndi/rmi://<TARGET_MACHINE>:<RMI_REGISTRY_PORT>/jmxrmi
Еще лучше, это тоже работает!
Ссылки
1 download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
2 download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
3 mx4j.sourceforge.net/docs/ch03s04.html
4 download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
5 http://www.rfc-editor.org/rfc/rfc2609.txt