Wenn Sie beim Starten einer JVM die Systemeigenschaft "com.sun.management.jmxremote" festlegen, können Sie jconsole oder visualvm ausführen und eine Verbindung mit diesem lokalen mBeanServer herstellen. Ich möchte dasselbe tun, was sie tun, aber ich kann nicht herausfinden, wie.Wie verbinde ich mich mit einem mBeanServer in einem anderen lokalen Prozess?
Gibt es eine Service-URL, mit der Sie eine lokal laufende JVM identifizieren können?
Ich weiß, dass ich dies tun konnte, indem ich einen jmxmp oder rmi Listener an einem bestimmten Port aufbaute und dann mit diesem Port verband, aber ich möchte das nicht tun, weil ich die Ports verwalten muss und weiß was Port geht zu dem jvm (wir laufen mehrere jvms auf dem gleichen Server).
befestigen API wird mir ein Handle für die JVM, aber nicht auf die MBeanServer in dieser JVM. Das Javadoc für die Attach-API zeigt ein Beispiel, wie ein Agent mit diesem Aufruf remote geladen wird: –
Richtig. Wenn Sie den eingebauten JRE-Verwaltungsagenten (/jre/lib/management-agent.jar) laden und den Listening-Port angeben (z. B. vm.loadAgent (Agent, "com.sun.management.jmxremote.port = 5000");), dann können Sie die JMX Remoting API verwenden, um sich mit dem MBeanServer auf Port 5000 zu verbinden. Wenn Sie nach einer Möglichkeit suchten, auf den MBeanServer in einer JVM ohne Portzugriff zuzugreifen ... bin ich mir nicht sicher .... Sie könnten in der Lage sein, ein FIFO-basiertes Protokoll oder etwas zu entwickeln. – Nicholas
Ich wollte keine Verbindung ohne Port-Zugriff herstellen ... Ich wollte einfach nicht angeben müssen, welcher Port verwendet werden soll. Stellt sich heraus, wenn Sie keinen Port angeben (d. H. Aufruf von vm.loadAgent (Agent, "com.sun.management.jmxremote")), dann wählt der jvm einen zufälligen hohen Port aus. Ich kann dann vm.getAgentProperties(). Get ("com.sun.management.jmxremote.localConnectorAddress") aufrufen, um eine URL zur Verbindung mit dem mBeanServer zu erhalten. Danke Nicholas für Ihre Hilfe! http://blog.fastconnect.fr/?p=385 –