Wie Sie festlegen, JMX remote port system-Umwelt-Parameter, die durch die java-code für die remote-überwachung?

Ich habe ein Programm, welches erfordert, die dynamisch (d.h. zur Laufzeit) öffnen Sie eine verfügbare Steckdose, und starten Sie eine JMX-Agenten. Diese JMX-Parameter werden innerhalb der Java-code und nicht durch Befehl Linie. Dies funktioniert sehr gut. Danach ist es erforderlich, zu überwachen( ich.e Problem JMX-Kommandos etc), die durch die Java Visual VM
aus der Ferne

Den RMI-server-Agenten in das Programm ist auf den Linien von out-of-box-management beschrieben:
http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html

Die Frage, die ich habe können wie folgt zusammengefasst werden:
Wie können die Befehl Linie Eigenschaften festgelegt werden, um die system-Ebene
durch die Java-code so, dass das remote-profiling verwendet werden kann??

-Dcom.sun.management.jmxremote.port=1234

Wenn die "jmxremote.port" und andere Parameter festgelegt sind, über die Befehlszeile,
remote-überwachung funktioniert gut. Ich bin auf der Suche nach einem Weg, dies zu tun durch Java
und nicht über die Befehlszeile.

Kann das Programm nicht den port angeben, über die Befehlszeile, wie der neue port hat dachte werden zur Laufzeit.

Muss der Prozess der remote-überwachung und es funktioniert auch lokal.
Wenn die folgenden Parameter sind nicht angegeben auf der Befehlszeile, die Java Visual VM keine Verbindung zum Prozess.

-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=10.0.0.128

Habe ich versucht.

System.setProperty("com.sun.management.jmxremote.port",Integer.toString(port));

Dies ist eines der ersten Dinge, die getan im Programm, bevor die JMXConnectorServer. Leider wird Sie nicht erkannt. Nur die Laufzeit-Eigenschaften (D. H. über die Befehlszeile angegeben werden anerkannt, für die JMX-Verbindung von Java Visual VM).

Kam auch über die Art und Weise Eigenschaften extrahiert werden, die von der java-collection-Klassen, konnte aber nicht erreichen, wie verfolgen Sie die Eigenschaft "com.Sonne.management.jmxremote.port="

public static void setEnv(Map<String, String> newenv) throws Exception {
  Class[] classes = Collections.class.getDeclaredClasses();
  Map<String, String> env = System.getenv();

  for(Class cl : classes) {

    if("java.util.Collections$UnmodifiableMap".equals(cl.getName())) {

      Field field = cl.getDeclaredField("m");
      field.setAccessible(true);

      Object obj = field.get(env);
      Map<String, String> map = (Map<String, String>) obj;

      //map.clear();
      map.putAll(newenv);
    }
  }
}

Jede mögliche Hilfe würde geschätzt!

  • Sollten Sie Bearbeiten Ihre ursprüngliche Frage beinhalten und die code-Beispiele habe, dass Sie Entsendung in den Kommentaren.
InformationsquelleAutor Devesh | 2011-09-01
Schreibe einen Kommentar