Я использую экземпляр tomcat7 для запуска приложения Java. Моему приложению требуется инструментарий Java. Это делается с помощью javaagent, и я передаю агент при запуске в JVM в скрипте setenv.bat.Не удается открыть Java Instrumentation для tomcat 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;
В чем проблема?
UPDATE
Я сделал некоторые дополнительные возможности отладки и premain запускается на выполнение и s_instrumentation получает инструментарий, но когда я называю getInstrumentation позже в моем коде s_instumentation установлено нулевое значение. Это странно, потому что ценность остается актуальной, думая о жизни программы.
Действительно ли ваш метод 'premain' называется? – Berger
premain выполняется, но я не получаю никаких инструментов – dragosb