Expliquer l’URL JMX

J’essaie de comprendre une URL de service JMX.

service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi 

Ce serait génial si quelqu’un pouvait m’aider à comprendre cela.

Merci

Je vais réutiliser une réponse que j’ai écrite plus tôt pour cette question: Impossible de se connecter au MBeanServer de Tomcat via jconsole dans Java6

Ce n’est pas complet, mais pourrait aider:

Supposons que le serveur JMX (alias ‘JMX Agent’ alias ‘la JVM à laquelle vous souhaitez vous connecter’) s’exécute sur ‘TARGET MACHINE’ avec le port de registre RMI sur ‘RMI REGISTRY PORT’ et le port du serveur JMX RMI sur ‘JMX RMI PORT DE SERVEUR’.

Remarque:

  1. Le registre RMI indique aux clients JMX où trouver le port du serveur JMX RMI ; des informations peuvent être obtenues sous la clé jmxrmi .
  2. Le port de registre RMI est généralement connu car il est défini via les propriétés système au démarrage de la JVM.
  3. Le port du serveur JMX RMI n’est généralement pas connu, car la JVM le choisit de manière aléatoire (si aucune autre précaution n’est prise).

L’URI suivant conduira à une connexion réussie (testée)

service:jmx:rmi://:/jndi/rmi://:/jmxrmi

Cela semble méchant. Disons le couper

Cet URI est un “RFC2609 Service Location Protocol URL” (bien, c’est vraiment un URI, non?)

Cela est composé de:

  • service – une constante
  • jmx:rmi – le type de service composé de: type abstrait jmx et schéma d’URL rmi
  • le rest – le sap (spécification du protocole d’access au service)

la sève est décomposée en:

  • //: – ipsite
  • /jndi/rmi://:/jmxrmi/jndi/rmi://:/jmxrmi URL

Un client JMX bien informé se connecte à “ipsite” pour effectuer des échanges JMX sur RMI; mais qu’en est-il du client JMX qui ne sait pas ce port? La patience…

La partie URL est décomposée en:

  • /jndi/ – Cela semble indiquer au client JMX qu’il peut obtenir des informations de recherche à l’emplacement qui suit
  • rmi://:/jmxrmi – Oui, nous obtenons des informations sur le serveur RMI JMX dans le registre RMI, sous la clé de recherche jmxrmi

C’est un peu un cart-before-horse, car il faut d’abord contacter le registre RMI fourni par la dernière partie de l’URL SLP.

Après avoir gratté la tête, intuitivement, essayons:

service:jmx:rmi:///jndi/rmi://:/jmxrmi

Oui, ça marche! Le port du serveur JMX RMI est bien obtenu à partir du registre. En revanche, la machine cible doit également être obtenue à partir du registre, donc:

service:jmx:rmi:///jndi/rmi://:/jmxrmi

Encore mieux, ça marche aussi!

Les références:

  1. http://download.oracle.com/javase/6/docs/api/javax/management/remote/rmi/package-summary.html
  2. http://download.oracle.com/javase/6/docs/api/javax/management/remote/JMXServiceURL.html
  3. http://mx4j.sourceforge.net/docs/ch03s04.html
  4. http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html#gdevg
  5. http://www.rfc-editor.org/rfc/rfc2609.txt

Expliquer:

 service:jmx:rmi://192.168.30.10:1234/jndi/rmi://192.168.30.10:2344/jmxrmi 
  1. service:jmx:rmi://192.168.30.10:1234 – indique qu’il existe un agent JMX sur la machine avec l’adresse IP 192.168.30.10. L’agent JMX utilise le port (TCP) 1234 pour fournir des services JMX via RMI (agit essentiellement comme un serveur RMI).
  2. /jndi/rmi://192.168.30.10:2344/jmxrmi – dit que le stub RMI à interagir avec l’agent JMX sur RMI se trouve dans le registre RMI qui s’exécute sur la machine avec l’adresse IP 192.168.30.10 et utilise (TCP) port 2344. Pour obtenir le stub RMI, vous devez rechercher la liaison “jmxrmi”.

Les réponses précédentes suggèrent que la deuxième partie de l’URL consiste à obtenir le port du serveur JMX RMI. Ce n’est pas correct. Le port du serveur JMX RMI est (TCP) 1234 et fait partie de l’URL. Ce que vous obtenez du registre RMI est le stub RMI ( javax.management.remote.rmi.RMIServerImpl_Stub ) que vous pouvez utiliser pour parler à l’agent JMX (serveur MBean) via RMI.

J’espère que cela t’aides.

Selon javax.management.remote.rmi

cette URL est assemblée comme ça

 service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname