2009-11-03 3 views
3

우리는 주요 고객 대면 애플리케이션과 백엔드 웹 서비스간에 인터페이스하는 여러 웹 서비스 클라이언트 애플리케이션을 보유하고 있습니다. 이러한 웹 서비스 응용 프로그램은 JAXWS 코드와이를 사용하고자하는 모든 응용 프로그램 사이에 깨끗한 인터페이스를 제공하기 위해 웹 서비스 및 구현 코드와 직접 인터페이스하는 자체 JAXWS 스텁 코드를 생성합니다. 우리는 지난 몇 주 동안이 문제에 약간의 문제가 있었지만 대부분 해결되었습니다.java.lang.NoClassDefFoundError : ProceedingJoinPoint

이들을 고객 용 응용 프로그램에 통합 할시기가되었을 때 주로 JDK1.5와 1.6 비 호환성에 초점을 맞춘 수많은 문제가 발생했습니다. 이것들은 지금 해결되었지만 우리는 해결책이없는 또 다른 문제에 부딪쳤다. 각 측면은 POJO 빈을 의미

<aop:config> 
    <aop:pointcut id="pointcut" expression="execution(* MyService.*(..))" /> 

    <aop:aspect id="throttling" ref="throttlingAdvisor"> 
     <aop:around pointcut-ref="pointcut" method="doThrottle" /> 
</aop:aspect> 
    <aop:aspect id="errorHandling" ref="errorHandlingAdvisor"> 
     <aop:around pointcut-ref="pointcut" method="handleExceptions" /> 

는,이 콩은에 명시된 방법을 포함 : 웹 서비스 클라이언트는 헤더 자격 증명, 예외 처리 및 제한과 같은 일반적인 일을 설정하는 AOP를 사용 org.aspectj.lang.ProceedingJoinPoint의 메소드 매개 변수 유형을 사용하여 구성하면, 이는 인터셉트하는 메소드의 인수를 추출하는 데 사용됩니다.

각 웹 서비스 클라이언트 (applicationContext-webservicename.xml에 있음)에 대해이 중 하나가 있습니다. 이 xml 파일은 고객 대면 응용 프로그램에 포함되고 고객 대면 응용 프로그램의 web.xml에서로드 된 기본 applicationContext.xml로 가져 오는 패키지 된 JAR 파일에 포함됩니다.

우리는이 웹 클라이언트에 대한 여러 가지 단위 테스트를 통해 개별적으로 별다른 문제가 없음을 증명합니다. 모든 서비스가 고객 대면 응용 프로그램에 포함되면 java.lang.NoClassDefFoundError : ProceedingJoinPoint 예외가 발생합니다 (우리는 JDK1.5.0_17에서 tomcat 5.5를 사용하고 있습니다).

특별한 의미가있는 경우를 대비하여 java.lang.NoClassDefFoundError 용 JavaDoc을 찾았습니다. JVM이 클래스가 존재하지 않는다고 생각하는 것처럼 보입니다. 그런 다음 찾을 수없는 클래스 (aspectjrt-1.5.4.jar 및 aspectjweaver-1.5.4.jar)가 들어있는 항아리를 찾았으므로이 클래스의 중복이 있으므로 각 항아리를 차례로 제거하려고 시도했습니다. 정확히 같은 오류가 발생합니다.

필수 종속성이 누락 되었습니까? 이 문제에 공통적 인 원인이 있습니까 (저는 어제 이것을 많이 찾지 않았습니다). 어떤 도움이라도 대단히 감사 할 것입니다.

+0

어떻게 LTW를 Tomcat에 연결하고 있습니까? –

답변

0

클래스 로더 문제 일 수 있습니다. AspectJ JAR은 어디에 있습니까? WEB-INF/lib에이 파일들을 가지고 있다면 아마도 Tomcat common/lib에 파일을 복사 해보고 도움이되는지 확인해보십시오.

응용 프로그램 서버 클래스 로더가 시작할 때이를 필요로 할 수 있지만 응용 프로그램 클래스 로더는 클래스 로더 계층에서 더 낮기 때문에 WEB-INF에서 가져 오지 못했을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 공용/lib로 옮겨 보았습니다. 아무런 영향을 미치지 않았습니다. 나는 또 다른 문제점 인 java.lang.NoClassDefFoundError : org/aspectj/weaver/reflect/ReflectionWorld $ ReflectionWorldException을 일으키는 server/lib로 이동하려고 시도했다. – Jonnie

0

aspectjweb.jar이 아닌 server/lib 폴더에만 aspectjrt.jar을 추가하십시오. 클래스가 중복되면 혼동을 야기 할 수도 있습니다. 런타임 jar ("rt"는 런타임을 의미 함)는 런타임에 사용됩니다. 위버 항아리는 컴파일/위브 타임에 사용됩니다. LTW 또는 CTW를 사용하고 있습니까?

+0

저는 LTW를 사용하고 있습니다. Maven이 항아리를 만들 때 특수한 짜임새는 없습니다. – Jonnie

1

이 시간 동안 우리는이 문제에 대한 해결책을 찾았습니다. SVN 커밋이 감지되면 Bamboo를 사용하여 프로젝트를 빌드합니다. 대나무 환경이 종속 프로젝트를 만들었을 때 개발 시스템과 일치하도록 설정되었지만 이상한 문제가 발생했습니다.

우리는 여전히 그 이유를 잘 모릅니다. 그러나 그 동안 우리는이 특정 프로젝트를 수동으로 구축하고 배포하고 있습니다.

비슷한 문제가 발생하면 누구나 내부 maven repos에서 자신을 격리하고 모든 프로젝트를 로컬로 다시 빌드하십시오.

모두에게 감사드립니다.