Необходимо запустить InstrumentationLoadTimeWeaver / openjdk 11 - PullRequest
0 голосов
/ 21 февраля 2019

У нас есть производственное приложение Java 1.6 / Tomcat 7 / Spring 4.

Мы перемещаем его в Openjdk 11. Это означает, что Spring 5 и я полагаю, что он также может включать Tomcat 9, так как мы обновляемвсе остальное.

Проблема в том, что это звучит само за себя:

ОШИБКА org.springframework.web.context.ContextLoader - Сбой инициализации контекста org.springframework.beans.factory.UnsatisfiedDependencyException:Ошибка создания бина с именем rootContextConfig: неудовлетворенная зависимость, выраженная через поле entityManagerFactory;вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем entityManagerFactory, определенным в com.xxxxx.config.RootContextConfig: сбой вызова метода init;Вложенное исключение - java.lang.IllegalStateException: Для использования InstrumentationLoadTimeWeaver необходимо начать с агента Java.См. Документацию Spring.

Все хорошо.Единственная проблема в том, что у нас уже есть Java-агент Spring Insturment

-javaagent:${CATALINA_HOME}/lib/spring-instrument-5.1.5.RELEASE.jar

Как я уже говорил выше, это весь рабочий код, мы просто обновляем версии.

Я уверен, что LTW загружаетсяпотому что мы можем видеть ошибку, создаваемую классом InstrumentationLoadTimeWeaver.

@Override
public void addTransformer(ClassFileTransformer transformer) {
    Assert.notNull(transformer, "Transformer must not be null");
    FilteringClassFileTransformer actualTransformer =
            new FilteringClassFileTransformer(transformer, this.classLoader);
    synchronized (this.transformers) {
        Assert.state(this.instrumentation != null,
                "Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.");
        this.instrumentation.addTransformer(actualTransformer);
        this.transformers.add(actualTransformer);
    }
}

Я просто не могу понять, как ее можно создать с помощью нулевого инструментария.Очевидно, я что-то упустил.Вероятно, что-то маленькое и глупое.Но сейчас у меня нет идей.

1 Ответ

0 голосов
/ 23 февраля 2019

Похоже, проблема в загрузке классов

  1. Добавьте параметр '-verbose: class', чтобы увидеть, была ли загружена InstrumentationLoadTimeWeaver

  2. попробуйте добавить эту опцию в вашу конфигурацию tomcat contextx <Context> ... <Loader delegate="true"/> ... </Context>

В Tomcat 7.0.27 произошли некоторые изменения, которые могут вызвать эту проблему

СделатьРеализация Catalina.getParentClassLoader согласуется с аналогичными методами по всему основанию кода, и она возвращает системный загрузчик классов, если не установлен родительский загрузчик классов.(markt)

...