Я буду повторно использовать ответ, который я написал ранее для этого вопроса: Не удается подключиться к MBeanServer Tomcat через jconsole в Java6
Это не завершено, но может помочь:
Предположим, у вас есть JMX-сервер (псевдоним «JMX-агент», псевдоним «JVM, к которому вы хотите подключиться»), работающий на «TARGET MACHINE» с портом реестра RMI в «RMI REGISTRY PORT» и порт сервера JMX RMI в 'ПОРТ СЕРВЕРА JMX RMI'.
Примечание:
- Реестр RMI сообщает клиентам JMX, где найти порт сервера JMX RMI ; информацию можно получить по ключу
jmxrmi
.
- Порт реестра RMI общеизвестен, так как он задается через системные свойства при запуске JVM.
- Порт JMX RMI-сервера обычно , а не , известный как 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
- остальное - сок (спецификация протокола доступа к сервису)
сок раскладывается на:
* * 1068
//<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
- Да, мы получаем информацию о JMX RMI Server в реестре 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
Еще лучше, это тоже работает!
Ссылки:
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
- http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
- http://mx4j.sourceforge.net/docs/ch03s04.html
- http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
- http://www.rfc -editor.org / гк / rfc2609.txt