Ich habe einen Code, der mit JMX verbindet und mBean mit Namen erhält. Jetzt schreibe ich Tests mit JUnit dafür. Ich habe bereits einige Tests ohne Authentifizierung mit etwas wie diesem gemacht:Laufzeiteinstellung JVM-Argumente für JMX
Jetzt möchte ich einen Test mit Authentifizierung durchführen. Also muss ich nächste JVM properies angeben:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=1234
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.access.file=/somepath/jmxremote.access
-Dcom.sun.management.jmxremote.password.file=/somepath/jmxremote.password
ich schon versucht, vorbei diese Eigenschaften in JMXConnectorServer
Umgebungsvariable. Auch ich habe versucht System.setProperty
. Aber es ist fehlgeschlagen, da die Verbindung ohne Anmeldeinformationen verfügbar war. Die einzige Möglichkeit, die es Arbeit macht, ist: Ich möchte zu vermeiden, solche Art der Sache, wegen der Notwendigkeit
private static void startJmxServer() throws Exception {
String name = ManagementFactory.getRuntimeMXBean().getName();
VirtualMachine vm = VirtualMachine.attach(name.substring(0, name.indexOf('@')));
String lca = vm.getAgentProperties().getProperty("com.sun.management.jmxremote.localConnectorAddress");
if (lca == null) {
Path p = Paths.get(System.getProperty("java.home")).normalize();
if (!"jre".equals(p.getName(p.getNameCount() - 1).toString()
.toLowerCase())) {
p = p.resolve("jre");
}
File f = p.resolve("lib").resolve("management-agent.jar").toFile();
if (!f.exists()) {
throw new IOException("Management agent not found");
}
String options = String.format("com.sun.management.jmxremote.port=%d, " +
"com.sun.management.jmxremote.authenticate=true, " +
"com.sun.management.jmxremote.ssl=false, " +
"com.sun.management.jmxremote.access.file=/somepath/jmxremote.access, " +
"com.sun.management.jmxremote.password.file=/somepath/jmxremote.password", PORT);
vm.loadAgent(f.getCanonicalPath(), options);
}
vm.detach();
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Example exampleMBean = new Example();
ObjectName exampleName = new ObjectName(MBEAN_NAME);
mbs.registerMBean(exampleMBean, exampleName);
}
Aber wie wurde Agent geladen ich nicht ändern Eigenschaften VM-Test ohne authentication.Also laufen in der manuellen Definition von tools.jar und möchte gängige JMX-Tools verwenden. Irgendeine Idee, wie man das schafft?
Vielen Dank! Du hast meinen Tag gerettet! Ich habe versucht, die gleichen Eigenschaftennamen in den Umgebungsattributen zu verwenden. Aber jetzt funktioniert alles wie erwartet. –