Tomcat7インスタンスを使用してJavaアプリケーションを実行しています。私のアプリケーションでは、Java計測が公開されている必要があります。これはjavaagentで行われ、起動時にエージェントをsetenv.batスクリプトのJVMに渡します。マニフェストファイルでtomcat用Java Instrumentationを公開できませんjvm
set JAVA_OPTS=%JAVA_OPTS% -javaagent:"C:\path\to\agent.jar"
Iが必要セクションを有する:エージェントクラスのpremainメソッドで
Premain-Class: package.name.agent.ExposeInstrumentation
を静的メソッド
を通じて静的変数にアクセス可能に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を返します。
何が問題ですか?
UPDATE私はさらにいくつかのデバッグを行なったし、premainが実行されますとs_instrumentationは、計測を受けるが、私は私のコードs_instumentationの後半でgetInstrumentationを呼び出すときにnullに設定されています。これは私が価値があることを奇妙なものにしています。
'premain'メソッドは実際に呼び出されていますか? – Berger
premainが実行されますが、私はどんな計測器も取得しません – dragosb