通过javassist+;javaagent+;jmx
实际上,我想开发一个java应用程序,它应该插装另一个我没有源代码的java应用程序 我试图创建一个代理并将其连接到jvm。。然后我创建了一个mbean并尝试连接到它。。当我尝试在我的项目中插入类时,它会起作用。。但我不知道如何用我的应用程序为远程应用程序插入仪器 这是我的代码:通过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.
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(实例);
}
如果情况清楚或者你需要其他帮助,请告诉我