Ho un programma che richiede dinamicamente (cioè in fase di esecuzione) l'apertura di un socket disponibile e l'avvio di un agente JMX. Questi parametri JMX vengono impostati all'interno del codice Java e non tramite la riga di comando. Funziona bene Successivamente è necessario per monitorare (cioè inviare comandi JMX ecc) attraverso Java visiva VM remotoCome impostare i parametri di ambiente del sistema di porte remote JMX tramite codice java per il monitoraggio remoto?
L'agente server RMI nel programma è sulle linee di fuori della gestione scatola descritte in: http://download.oracle.com/javase/6/docs/technotes/guides/management/agent.html
La domanda Posso essere riassunto come: Come è possibile impostare tali proprietà della riga di comando sul livello di sistema tramite il codice Java, in modo che sia possibile utilizzare il profilo remoto ??
-Dcom.sun.management.jmxremote.port=1234
Se "jmxremote.port" e altri parametri vengono impostati attraverso la linea di comando, monitoraggio remoto funziona bene. Sto cercando di trovare un modo per farlo attraverso Java e non tramite la riga di comando.
Il programma non può specificare la porta tramite la riga di comando poiché la nuova porta disponibile deve essere calcolata in fase di esecuzione.
Il processo richiede il monitoraggio remoto e funziona a livello locale. Se i parametri seguenti non sono specificati alla riga di comando, Java Visual VM non si connette al processo.
-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
Ho provato.
System.setProperty("com.sun.management.jmxremote.port",Integer.toString(port));
Questa è una delle prime cose fatte nel programma prima di avviare il JMXConnectorServer. Sfortunatamente non è riconosciuto. Solo le proprietà del tempo di esecuzione (ad esempio specificate tramite la riga di comando sono riconosciute per la connessione JMX da Java Visual VM).
è venuto anche attraverso le proprietà modo in cui può essere estratto da classi di insiemi java, ma non ha potuto raggiungere come rintracciare la proprietà "com.sun.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);
}
}
}
Qualsiasi aiuto sarebbe apprezzato !
Si dovrebbe modificare la tua domanda originale e includere gli esempi di codice che avete state postando nei commenti. – Perception