Impossible de se connecter à une JVM distante avec JConsole

Publié le 17 Avril 2013

J'ai une application Java que je démarre avec les propriétés qui vont bien pour activer JMX:

-Dcom.sun.management.jmxremote.port=22022' \
-Dcom.sun.management.jmxremote.ssl=false' \
-Dcom.sun.management.jmxremote.authenticate=false 

Mais impossible d'ouvrir une jconsole depuis une machine distante. J'obitent toujours l'erreur suivante:

Connection Failed: Retry?

The connection to <server> did not succeed. Would you like to try again?

Pour creuser l'affaire on peut lancer jconsole avec l'option -debug ce qui ouvre une fenêtre supplémentaire avec les logs.

Et là surprise :

java.rmi.ConnectException: Connection refused to host: 127.0.0.1; nested exception is: 
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2370)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:296)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:242)
at sun.tools.jconsole.ProxyClient.tryConnect(ProxyClient.java:352)
at sun.tools.jconsole.ProxyClient.connect(ProxyClient.java:314)
at sun.tools.jconsole.VMPanel$2.run(VMPanel.java:295)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
... 10 more

Et oui on essaie de se connecter au 127.0.0.1.

En fait lorsqu'on démarre l'appli sans préciser de server RMI on est par défaut sur localhost. Pour se connecter depuis une machine distante il faut donc utiliser la propriété java.rmi.server.hostname en précisant le nom ou l'adresse IP du serveur sur lequel tourne l'appli:

-Dcom.sun.management.jmxremote.port=22022' \
-Dcom.sun.management.jmxremote.ssl=false' \
-Dcom.sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=192.168.1.5

Rédigé par Bliz

Publié dans #Java

Repost 0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article