블로그 이미지
Max.

calendar

      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Notice

2012.08.29 15:49 개발관련

1) 방법


myBatis는 MapperScannerConfigurer 를 통해 interface 기반의 Mapper를 등록하여 매핑한다. MapperScannerConfigurer 의 스캐너 기능은 Spring의 ClassPathBeanDefinitionScanner를 확장한 것이다.  ClassPathBeanDefinitionScanner는 ClassPathScanningCandidateComponentProvider를 확장한 것이다.  ClassPathScanningCandidateComponentProvider는  resourcePattern라는 속성을 제공하고 있다. 이것의 기본값은 **/*.class 로 모든 클래스를 스캔하게 된다. 


보통 spring 의 스캐너 기능은 리소스에 대한 패턴을 이용해서 그 편리함이 높다.  그런데 구현확장하는 과정에서 resourcePattern를 더이상 찾아볼수 없게 된것이다.


MapperScannerConfigurer 의 inner class에 ClassPathBeanDefinitionScanner를 확장한 Scanner가 있는데 스캔을 실행하기 전에 setResourcePattern()를 이용해 적당한 값을 넣어주면 패턴을 이용한 스캔이 가능하게 된다.




2) 문제


MapperScannerConfigurer는 basePackage 속성값으로 스캔을 하는데 Mapper 후보군으로 해당 basePackage 이하의 모든 Interface 구현체를 올려놓고 등록해 버린다. 그때 호출자와 매핑을 시도하는데 문제가 발생한다. 예를들어 AccountDao 를 테스트 하면 xxx.AccountDao.save를 잘 호출한다. 그런데 이를 이용한 Service를 구현하고 호출하면 AccountService.save를 호출해 버린다. 


물론 basePackage 를 특별한 패키지로 구분하여 관리하면 이같은 문제는 없다. 스캔 대상을 달리 정하면 되니까 (xxx.mapper 패키지에만 매퍼파일을 넣으시요... 같이) 하지만 도메인 기준으로 패키지명 분류로 하면 위와 같은 방법은 곤란하다. 다른 방법이 있긴 하다 basePackage 가 String형이긴 하지만, 콤마(,)로 여러개를 등록할수있다. 해서 xxx.A.dao, xxx.B.dao, xxx.C.dao 이렇게 등록해도 된다. 다만, 설정파일이 지저분해지고, 도메인 추가할때마다 넣어주는걸 기억할수 있다면 그리 나쁜 방법은 아니다.


Spring의 compoent-scan 처럼 include와 exclude 기능이 있다면 좋겠지만 현재는 없고 문제를 해결해야 한다면...

저작자 표시
신고
posted by Max.
2012.08.21 16:36 개발관련

오래전 arawn 님이 만들고 현재는 버려진 spring-data-sqlmap 프로젝트와 비슷한 걸 만들어야 할 일이 생겼다. 해서 해당 프로젝트를 뜯어볼 요량이다.


그런데 소스버전이 오래되어서 돌려보기도 어렵다... 많은 자바 개발자가 스프링을 사용하고 myBatis를 사랑(?)하는데 왜 이런 프로젝트가 발전하지 못하고 있을까... ORM 말고 어떤 대체제가 있는걸까? 내가 찾지 못한.... 뭘까...ㅡㅡ;;;


그나저나 객체지향이란 무엇일까....

저작자 표시
신고
posted by Max.
2012.08.21 16:25 개발관련

spring-data-commons-core 프로젝트가 좀 이상한게 있는데 버전이 낮으면, Spring3.x 일부 버전과 충돌된다. spring-data-commons-core 프로젝트 홈페이지에 나온 버전을 써도 그런다. 찾아보니 최신버전은 http://central.maven.org/maven2/org/springframework/data/spring-data-commons-parent/ 여기서 제일 높은 버전을 찾아 POM에 넣으면 문제가 사라진다. 현재 최신은 1.3.2.RELEASE 버전이고 이를 dependency 시키면 된다.


이렇게 별 관심 없는 프로젝트에서 삽질하다 Spring 4.0 Properties가 있는걸 보고 이건뭐지... Spring JIRA를 급히 들어가 보니 로드맵(https://jira.springsource.org/browse/SPR)에도 없는 버전닝 아닌가... 요 프로젝트엔 재밌는 녀석들이 많나 보다...


그나저나 Spring Roo 는 어떻게 되어 가고 있을까.... 


저작자 표시
신고
posted by Max.
prev 1 next