Ich habe gestern gut über eine Stunde versucht, mich mit JMX zu einer Java-Anwendung auf einem Server zu verbinden: JConsole wollte mir partout keinen Einblick gewähren, dabei hatte ich alle com.sun.management.jmxremote-Parameter brav gesetzt und mich zum x-ten Mal versichert, dass dort keine Firewall läuft.
Ein kleines Java-Programm, dass sich zum gewünschten JMX-Port verbindet, hat dann endlich die Ursache aufgedeckt: Der JMX-Connector lief zwar auf dem gewünschten Port, aber die RMI-Registry hatte sich an die falsche IP-Adresse angebunden -- so lief der erste Teil des Verbindungsauflaufs glatt durch, aber beim Abfragen der ersten MBean war dann Schluss.
"Schuld" daran ist ein Update in Debian Linux (mittlerweile auch in Ubuntu angekommen), dass neben 127.0.0.1 in der /etc/hosts auch noch 127.0.1.1 (man beachte die vorletzte Eins!) hinzufügt. Die Begründung dazu finde ich immer noch recht schwammig, zumal es genügend Bugreports gegen diese Änderung gibt.
Unglücklicherweise entscheidet sich die RMI-Registry (zufällig?) für 127.0.1.1, was faktisch alle Verbindungen von extern verhindert.
Mögliche Lösungen hierfür:
- die Zeile mit 127.0.1.1 in der
/etc/hostsauskommentieren bzw. löschen - die Java-Anwendung mit
-Djava.rmi.server.hostname=any.other.ipstarten
