通过javassist+;javaagent+;jmx

通过javassist+;javaagent+;jmx,java,jmx,instrumentation,javassist,javaagents,Java,Jmx,Instrumentation,Javassist,Javaagents,实际上,我想开发一个java应用程序,它应该插装另一个我没有源代码的java应用程序 我试图创建一个代理并将其连接到jvm。。然后我创建了一个mbean并尝试连接到它。。当我尝试在我的项目中插入类时,它会起作用。。但我不知道如何用我的应用程序为远程应用程序插入仪器 这是我的代码:https://github.com/ammouna8ammouna/Monitoring.git 我是仪器世界的新手,我真的需要帮助。如果您可以获得目标VM的processID,您可以使用 com.sun.tools.

实际上,我想开发一个java应用程序,它应该插装另一个我没有源代码的java应用程序

我试图创建一个代理并将其连接到jvm。。然后我创建了一个mbean并尝试连接到它。。当我尝试在我的项目中插入类时,它会起作用。。但我不知道如何用我的应用程序为远程应用程序插入仪器

这是我的代码:
https://github.com/ammouna8ammouna/Monitoring.git


我是仪器世界的新手,我真的需要帮助。

如果您可以获得目标VM的processID,您可以使用

com.sun.tools.attach.VirtualMachine

例如,如果您有pid、JAR目标的路径和处理JAR的加载程序,您可以尝试以下方法:

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);
}
private static void attach(字符串pid、字符串路径、,
类装入器(toolLoader)引发异常{
类attacherLib=toolLoader.loadClass(“com.sun.tools.attach.VirtualMachine”);
Class string=toolLoader.loadClass(“java.lang.string”);
方法attach=attacherLib.getMethod(“attach”,字符串);
对象实例=attach.invoke(null,pid);
方法loadAgent=attacherLib.getMethod(“loadAgent”,string,string);
invoke(实例,jarFilePath,“”);
方法detach=attacherLib.getMethod(“detach”);
detach.invoke(实例);
}
如果情况清楚或者你需要其他帮助,请告诉我