5

WEB-INF/lib 디렉토리/스프링 악기 tomcat.jar와 함께 META-INF는/context.xml에 정의하는 TomcatInstrumentableClassLoader와 톰캣 작동하게하는 방법 Tomcat 7.0.27에서 호스팅되는 서버 측 Eclipselink 2.4가 있습니다. mywebapp와/META-INF는/context.xml에 나는 다음 Tomcat은 잘 mywebapp와 실행 내가 $TOMCAT_HOME/libspring-instrument-tomcat.jar를 넣으면나는 봄 데이터 3.1.0.RELEASE를 사용하는 간단한 응용 프로그램을 구축했던

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

봄 클래스 로더를 가지고 있지만 나는 $TOMCAT_HOME/webapps/mywebapp/WEB-INF/libspring-instrument-tomcat.jar를 넣어 경우 - Tomcat은 예외로 사망

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 

컨텍스트 로더 매개 변수 false-useSystemClassLoaderAsParent 세트는 도움이되지 않습니다.

톰캣에 (사용자 정의) 전역 lib를 갖고 싶지 않습니다. (따라서 실제 생산 시스템에서 글로벌 사용자 정의가 쉽지는 않을 것입니다.) 따라서 필요한 모든 언어를 현지화하려고합니다. 간단한 (아직 큰) 전쟁 파일에 들어 있습니다. 그런 캡슐화를 달성하는 방법에 대한 생각?

답변

5

글쎄, 당신은 Tomcat의 lib 폴더에 추가 항아리를하지 않을 경우, 유일한 옵션은 (아직 봄/AspectJ의 LTW 작업을 위해) -javaagent를 추가 바람둥이의 실행 스크립트를 편집하는 것입니다 :. ..instrument.jar를 JAVA_OPTS 또는 CATALINA_OPTS에 추가하고 context.xml 파일을 제거하십시오 (TomcatInstrumentableClassLoad er는 더 이상 필요하지 않습니다).

+0

나는 올바른 해결책으로 당신의 대답을 다루어야한다. 그것은 지금까지 발견 된 최상의 해결책이다. 감사! –

0

context.xml를 잘 작성하지 될 수 있습니다. 이 시도 :

<?xml version="1.0" encoding="UTF-8" ?> 
<Context> 
    <Loader 
    loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader" 
    useSystemClassLoaderAsParent="false" /> 
</Context> 
+1

** useSystemClassLoaderAsParent **로 제안을 시도했지만 Tomcat 7에서 경고 : [SetPropertiesRule] {Context/Loader} 'useSystemClassLoaderAsParent'속성을 'false'로 설정하면 일치하는 속성을 찾지 못했습니다. '그리고 java.lang.ClassNotFoundException : org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader'가 다음 오류입니다. –

+0

또한 tomcat7 사용하지만, 나는 스프링 악기 tomcat.jar 당신이 권리를 넣어 한 곳이 내가, 내가, 내가 넣어 개발하기 위해 인 IntelliJ 아이디어를 사용한다고 말할 생각하지 않는다 바람둥이/lib.I에 투입한다 successed.the tomcat7utf8의 \의 conf에서의 context.xml \ 카탈 \ 로컬 호스트 \ yourwebappnameDirectory \ 여기서, 그것을 완전히이 같은 ' <컨텍스트 경로 = 하지 바람둥이 \ 웹 애플리케이션 디렉토리에 ""Docbase에 = "웹 응용 프로그램의 경로"> <로더 loaderClass는 = "org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"useSystemClassLoaderAsParent는 = "거짓"/> ' 웹 응용 프로그램 . – flym

+0

네가 제대로 이해했다면 tomcat-instrumental.jar를 Tomcat/lib에 넣어 두는 것이 좋겠지 만 이것은 내가 원하지 않는 일이다. (그러나 나는 다른 방법으로는 그 순간에 사용할 수 없다.) 문제는 톰캣/lib에 그대로 남겨두고 그것의 자신의 libs와 함께 내 애플 리케이션을 만족하는 방법입니다. –