Es scheint, dass Ihr Endzitat zu früh kommt. Es sollte nach dem letzten Parameter sein.
Dieser Trick hat bei mir funktioniert.
Mir ist etwas Interessantes aufgefallen: Wenn ich meine Anwendung über die folgende Befehlszeile starte:
java -Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Wenn ich versuche, mit jconsole von einem Remotecomputer aus eine Verbindung zu diesem Port herzustellen, ist die TCP-Verbindung erfolgreich. Einige Daten werden zwischen der Remote-jconsole und dem lokalen jmx-Agenten ausgetauscht, auf dem meine MBean bereitgestellt wird. Anschließend zeigt jconsole eine Verbindungsfehlermeldung an. Ich habe eine Wireshark-Erfassung durchgeführt, die den Datenaustausch sowohl vom Agenten als auch von der Jconsole zeigt.
Daher ist dies kein Netzwerkproblem. Wenn ich ein netstat -an mit oder ohne Systemeigenschaft java.rmi.server.hostname ausführe, habe ich die folgenden Bindungen:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING
TCP [::]:9999 [::]:0 LISTENING
Dies bedeutet, dass in beiden Fällen der an Port 9999 erstellte Socket Verbindungen von einem beliebigen Host an einer beliebigen Adresse akzeptiert.
Ich denke, der Inhalt dieser Systemeigenschaft wird irgendwo bei der Verbindung verwendet und mit der tatsächlichen IP-Adresse verglichen, die der Agent für die Kommunikation mit jconsole verwendet. Und wenn diese Adressen nicht übereinstimmen, schlägt die Verbindung fehl.
Ich hatte dieses Problem nicht, als ich mit jconsole vom selben Host aus eine Verbindung herstellte, sondern nur von echten physischen Remote-Hosts. Ich nehme also an, dass diese Überprüfung nur durchgeführt wird, wenn die Verbindung von "außen" kommt.