我创建了一个 java 代理 jar 文件(在命令行上完美运行)。接下来,我想将此代理附加到 j2ee 服务器中正在运行的 JVM。所以我使用了代码:
public static void loadAgent() {
System.out.println("dynamically loading javaagent");
String nameOfRunningVM = ManagementFactory.getRuntimeMXBean().getName();
int p = nameOfRunningVM.indexOf('@');
String pid = nameOfRunningVM.substring(0, p);
try {
VirtualMachine vm = VirtualMachine.attach(pid);
String jarFilePath = vm.getSystemProperties().getProperty("java.home")+File.separator+"lib"+File.separator+"test-agent-7.jar";
vm.loadAgent(jarFilePath, "");
vm.detach();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
编辑:这现在可以工作了,我可以看到 Transformer 被调用了。我还可以移除变压器并能够调试变压器。
我的问题是:
- 完成后如何卸载此 java 代理 jar?
- 是关闭/重新启动 JVM 的唯一方法吗?
- 如果罐子留在内存中会有什么影响吗?