2016-04-11 15 views
0

Eigentlich will ich eine Java-Anwendung Hexe Developpe sollte eine andere Java-Anwendung Hexe instrumentate i seinen Quellcode nicht haben ..Instrumentate eine ferne Java-Anwendung über Javassist + javaagent + JMX

Ich habe versucht, einen Agenten zu erstellen und befestige es an den jvm .. dann habe ich eine mbean erstellt und versucht, eine Verbindung zu ihr herzustellen. es funktioniert, wenn ich versuche, eine Klasse in meinem Projekt zu instrumentieren. aber ich weiß nicht, wie ich eine entfernte Anwendung mit meiner Anwendung instrumentieren könnte ..

hier ist mein Code: https://github.com/ammouna8ammouna/Monitoring.git

i an der Instrumentierung Welt ein wirklich neues bin d Ich brauche wirklich Hilfe.

Antwort

0

Wenn Sie die processID der VM, die Sie zielen Sie Ihren Agenten mit

com.sun.tools.attach.VirtualMachine

Zum Beispiel legen können, wenn Sie pid haben der Pfad des JAR Ziel, und der Lader, die die JAR umgehen können Sie so etwas wie dies versuchen:

private static void attach(String pid, String jarPath, 
     ClassLoader toolLoader) throws Exception { 
    Class<?> attacherLib = toolLoader.loadClass("com.sun.tools.attach.VirtualMachine"); 
    Class<?> string = toolLoader.loadClass("java.lang.String"); 

    Method attach = attacherLib.getMethod("attach", string); 

    Object instance = attach.invoke(null, pid); 

    Method loadAgent = attacherLib.getMethod("loadAgent", string, string); 
    loadAgent.invoke(instance, jarFilePath, ""); 

    Method detach = attacherLib.getMethod("detach"); 
    detach.invoke(instance); 
} 

Lassen Sie mich wissen, wenn es klar ist, oder Sie andere Hilfe benötigen.