必须启动InstrumentationLoadTimeWeaver / openjdk 11

时间:2019-02-21 15:56:28

标签: java spring tomcat spring-data eclipselink

我们有一个生产Java 1.6 / Tomcat 7 / Spring 4应用程序。

我们将其移至Openjdk11。这意味着Spring 5和我认为它可能还包括Tomcat 9,因为我们正在更新其他所有内容。

问题是自我解释的声音:

  

错误org.springframework.web.context.ContextLoader-上下文初始化失败   org.springframework.beans.factory.UnsatisfiedDependencyException:创建名称为'rootContextConfig'的bean时出错:通过字段'entityManagerFactory'表示的不满足的依赖关系;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建在com.xxxxx.config.RootContextConfig中定义的名称为'entityManagerFactory'的bean时出错:调用init方法失败;嵌套异常为java.lang.IllegalStateException:必须从Java代理开始才能使用InstrumentationLoadTimeWeaver。请参阅Spring文档。

一切顺利。唯一的问题是我们已经有了Spring Insturment Java代理

-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 :(得分:0)

似乎问题在于类加载

  1. 添加'-verbose:class'选项以查看是否已加载InstrumentationLoadTimeWeaver

  2. 尝试将此选项添加到您的tomcat contexct配置 <Context> ... <Loader delegate="true"/> ... </Context>

Tomcat 7.0.27中进行了一些更改,可以触发此问题

  

使Catalina.getParentClassLoader的实现与代码库中的类似方法保持一致,如果未设置父类加载器,则使它返回系统类加载器。 (市场)