봄싹2009. 3. 26. 00:20
프로스프링 6장은 @AspectJ에 대해서 다룬다..
뒷부분에는 aop의 표준이라고 말 할수 있는 aspectJ에 대해서 잠시 언급이 되는데..
프로스프링 소스를 받아서 실행해보려면..
책에 있는 내용있는 내용에 더불어 몇가지 해주어야 할 것들이 있다.

우선 책에서 나오는 예제들은 IntelJ IDE 기반으로 만들어진.. 소스들이고..관련 lib들이 없다..
그래서 막상 돌려 보려면 관련 lib들을 구하고... 이것저것 해주어야 한다..
번역서가 나오면 지금 계획하고 있는 형태로 새로운 소스가 배포가 될 수도 있으니..
큰 무리는 따르지 않을 것 같다..

물론 능숙한 개발자들은 알아서 손쉽게 돌려 볼 수도 있겠지만...
초보자들에겐 힘든 일이 될 수도 있다..

잠시 다른길로 새어버렸는데;; 다시 본론으로 가자면.. 우선..
com.apress.prospring2.ch06.aspectj.AspectJDemo1.java 파일이 있다..
코드를 보면 asepect 파일인 .aj 파일들이 있고.. AOP는 이놈들이 담당한다..

이클립스에 AspectJ플러그인을 설치 하던가 STS 를 사용하던가.. IDE에서 수행하려면 해당 플러그인의 도움으로 ajc를 할 수가 있는데.. 그렇게 변경하고도 돌려보면
Exception in thread "main" java.lang.VerifyError: (class: com/apress/prospring2/ch06/practical/PerformanceAndHealthCollectingAspect, method: ajc$inlineAccessMethod$com_apress_prospring2_ch06_practical_PerformanceAndHealthCollectingAspect$com_apress_prospring2_ch06_practical_PerformanceLogExtractor$extract signature: (Lcom/apress/prospring2/ch06/practical/PerformanceLogExtractor;Lorg/aspectj/lang/JoinPoint;Ljava/lang/Object;)Lcom/apress/prospring2/ch06/practical/PerformanceLog;) Illegal use of nonvirtual function call
    at com.apress.prospring2.ch06.services.DefaultUserService.login(DefaultUserService.java:13)
    at com.apress.prospring2.ch06.aspectj.AspectJDemo1.main(AspectJDemo1.java:17)

이러한 에러를 만날 수 있을 것이다..
왜 나는 건지 알아보지는 안았지만.. aop가 적용된 객체가 6장 예제 전반에 걸쳐서 사용되어 져서.. 그런지.. 실제로 돌려서 나온 결과들을 비교해보면 의도 하지 않은 AOP들이 적용되다가 예외가 나는듯하다..

그래서 보면 build.xml이 제공되어 진다..
책에선 aspectjtools.jar를 ${ANT_HOME}/lib 에다가 넣고 돌리라고 하는데;;
IDE에서 돌리려면;;
해당 그림처럼 ant 실행도구에 classpath를 잡아줘야 한다.
물론 ${ANT_HOME}/lib 홈에 카피를 했다면;;

해당 프로젝트 root에 가서;;
ant를 쳐주어도 되고..

해당 ant를 실행전에.. aspectj를 설치하라고 나오는데.. 일단 aspectjtools.jar 파일만 구해서 해당 경로에 넣어준다면..
설치하지 않고서도 돌아갈 수 있다..

우분투 유저라면
sudo apt-get install aspectj
라는 명령어로 쉽게 설치가 가능하며..
~/.ant/lib 안에 해당 jar 파일을 카피 해넣어도 물론 빌드를 할 수 있다.

aspectjtools.jar 파일을 구할 때는 잘 구해야 한다.. 사용하는 메이븐 저장소에 해당 jar 파일이 없어서 구글링을 통해서
구한 jar 파일로 예제를 돌렸다가.. 삽질을 하게 되었고.. 나중에는 다른 메이븐 저장소에서 해당 lib를 구해서 결과를 얻게 되었지만.. 말이다..

막상 적고 나니.. 책에 있는 내용을 풀어 놓것 밖에 되지 않는듯 하다.ㅋ
아.. 마지막으로 해당 build.xml 파일을 보면;
<property name="dir.lib" value="../../lib"/>
이부분이 있는데.. 이 경로는 해당 lib 위치로 수정을 하던가 프로젝트 두단계상위에다가 해당 lib 폴더를 만들어서..
해당 jar들을 넣어주어야 한다..
나같은 경우는 그냥..

<!--
    <property name="dir.lib" value="../../lib"/>
      -->
    <property name="dir.lib" value="/home/helols/.m2/repository/"/>
이렇게 바꾸고 해버렷다..!!

이제! 6장 소스 코드 검증도 ~ 끝나는구나!!
Posted by is윤군

댓글을 달아 주세요