【发布时间】:2016-07-09 10:56:43
【问题描述】:
我正在使用 tomcat7 实例来运行 Java 应用程序。我的应用程序需要暴露 Java 工具。这是通过 javaagent 完成的,我在启动时将代理传递给 setenv.bat 脚本中的 JVM。
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"C:\path\to\agent.jar"
在清单文件中,我有所需的部分:
Premain-Class: package.name.agent.ExposeInstrumentation
在代理类的 premain 方法中,将 JVM 提供的检测分配给可通过静态方法访问的静态变量
public final class ExposeInstrumentation {
private static Instrumentation s_instrumentation;
public static void premain(String arguments, Instrumentation instrumentation) {
s_instrumentation = instrumentation;
}
public static Instrumentation getInstrumentation() {
return s_instrumentation;
}
}
但是当我这样做时在我的代码中:
Instrumentation instrumentation = ExposeInstrumentation.getInstrumentation();
getInstrumentation() 返回 null;
有什么问题?
更新
我做了一些进一步的调试,premain 被执行并且 s_instrumentation 接收到检测,但是当我稍后在我的代码中调用 getInstrumentation 时,s_instumentation 设置为 null。这很奇怪,我认为该值在程序的生命周期内仍然有效。
【问题讨论】:
-
你的
premain方法真的被调用了吗? -
premain 已执行,但我没有得到任何工具
标签: java tomcat instrumentation javaagents