Whiteship's Note


@Configurable 사용시 버그 피해가기

모하니?/Coding : 2008.04.24 15:06


Caused by: java.lang.VerifyError: (class: 머시기/모시기/클래스$$EnhancerByCGLIB$$6dd4e683, method: unique signature: ()L저기기/거시기/클래스;) Inconsistent stack height 1 != 0


참조 : http://forum.springframework.org/showthread.php?t=51455

CGLib으로 만든어진 객체에 위빙을 시도해서 생기는 문제 같은데, 일종의 버그인가봅니다. 이전에 @Configurable 테스트 할 땐 못 본 에러인데 오랜만에 이걸 쓸 일이 있어서 사용하니까 발생하네요.

이 문제를 해결(?)하려면 일단 META-INF 폴더를 클래스 패스 안에 만들어 줍니다. 만든 다음에 클래스 패스에 추가해도 되구요.

다음은 aop.xml 파일을 정의하고 다음과 같이 적어줍니다.

<?xml version="1.0"?>

<!--
    AspectJ load-time weaving config file to install common Spring aspects.
-->
<aspectj>

    <weaver options="-showWeaveInfo" >
        <exclude within="*..*CGLIB*" />
    </weaver>

    <aspects>
        <aspect
            name="org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect" />
        <aspect
            name="org.springframework.transaction.aspectj.AnnotationTransactionAspect" />
    </aspects>

</aspectj>

다른 내용은 spring-aspects.jar 파일에 기본으로 들어있는 aop.xml의 내용과 일치하구요. 거기에 <warver> 엘리먼트를 추가해서 CGLIB이 들어간 클래스에는 위빙하지 말라는 설정을 해줍니다.

아.. 근데 이렇게 하면 프록시에는 위빙하지 말라는건데... 이것참 난감하네요. 버그 보니까 해결됐다고 나오는데 저 문제는 왜 발생하는건지..에구구...

top







티스토리 툴바