5

我构建了一个简单的应用程序,它在服务器端使用 Spring Data 3.1.0.RELEASE 和 Eclipselink 2.4 - 它托管在 Tomcat 7.0.27 中。在 mywebapp/META-INF/context.xml 我有 Spring 类加载器

<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>

如果我放入spring-instrument-tomcat.jar$TOMCAT_HOME/lib则 Tomcat 运行 mywebapp 很好,但如果我放入spring-instrument-tomcat.jar- $TOMCAT_HOME/webapps/mywebapp/WEB-INF/libTomcat 异常死亡

java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar

上下文加载器参数useSystemClassLoaderAsParent设置为false也无济于事。

我不想在 Tomcat 中有任何(自定义)全局库(在我们的现实生产系统中拥有全局库并不容易),因此我试图简单地本地化所有需要的东西(但很大)战争文件。关于如何实现这种封装的任何想法?

4

2 回答 2

5

好吧,如果您不想在 Tomcat 的 lib 文件夹中添加额外的 jar,唯一的选择(仍然让 Spring / AspectJ LTW 工作)是编辑 tomcat 的运行脚本以将 -javaagent:...instrument.jar 添加到其 JAVA_OPTS 或 CATALINA_OPTS ,并删除 context.xml 文件(您将不再需要 TomcatInstrumentableClassLoad‌​er)。

于 2013-01-08T23:10:07.850 回答
0

可能是你context.xml的不对。试试这个:

<?xml version="1.0" encoding="UTF-8" ?>
<Context>
  <Loader
    loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"
    useSystemClassLoaderAsParent="false" />
</Context>
于 2012-08-19T03:02:05.357 回答