'에러코드맵핑?'에 해당되는 글 1건

  1. 2009.01.15 스프링소스 까보기(SQLErrorCodesFactory)
봄싹2009.01.15 13:15
음.. 스프링에 DataAccessException 이라는 놈이 있다.
그런데 그놈은 디비관련 에러코드를 어느정도 맵핑하여 ;;
정보들을 돌려준다;; badSqlGrammarCode 나 .. dataIntegrityViolationCode 뭐 이런것들의 정보;;
그래서 한번 살펴보았다;;
사실은 에러코드매핑하는걸 하나 만들고자 하였는데 스프링에선 어떻게 했나 궁금하기도 하고.
전에 한번 봤었는데 기억이 가물가물 하여 ~
점심시간에 짬을 내어본다..

spring-jdbc.jar을 보면
org/springframework/jdbc/support/sql-error-codes.xml  파일이 존재 한다 .
여기에 보면 ;;
<bean id="Oracle" class="org.springframework.jdbc.support.SQLErrorCodes">
        <property name="badSqlGrammarCodes">
            <value>900,903,904,917,936,942,17006</value>
        </property>
        <property name="invalidResultSetAccessCodes">
            <value>17003</value>
        </property>
        <property name="dataIntegrityViolationCodes">
            <value>1,1400,1722,2291,2292</value>
        </property>
----------------------------------

이러한 정보들이 있다..  그럼 이놈들을 사용가능하게 만들어주는 놈은 누구인가 ?

org.springframework.jdbc.support.SQLErrorCodesFactory (해당 API) 놈인데;...
대충 살펴보면 ;; spring에서 정의한 sqlErrorCode이와 사용자가 직접 정의해서 사용할 수 있도록 되어 있다;;
역시나 대박이다~ 언제나 프레임웍에 국한되어 사용하지 않고.. 사용자 측면도 생각해주는 Spring.. good!!
대충의 코드는 이러하다..

더보기


코드를 보면.. 우선 처음에 SQL_ERROR_CODE_DEFAULT_PATH 기본으로 정의된 xml을 읽고 (org/springframework/jdbc/support/sql-error-codes.xml) 다음에는 ..
SQL_ERROR_CODE_OVERRIDE_PATH 사용자 정의 xml 을 한번더 읽는다.. 이름은 sql-error-codes.xml 로 classpath 에 잡혀 있으면 될듯하다.. ;;

여기서 보면서 보면서 .. 아리까리 했던건..
  DefaultListableBeanFactory lbf = new DefaultListableBeanFactory();
  XmlBeanDefinitionReader bdr = new XmlBeanDefinitionReader(lbf);
이부분이다 ..

DefaultListableBeanFactory (해당 API)이름으로 유추해보아..
기본 빈들을(타입이 같은?) 리스트 형태로 만들어주는 팩토리? 이렇게 되나 ? xml에서 읽은 빈들을 리스트 형태로 만들어주는 것 같기도 하고.. 한데;; 소스를 보면 타입이 같은 빈들을 Map에 담아서 빈이름 key 빈 value 형태로 돌려준다..
xml을 보면 ...
<bean id="Oracle" class="org.springframework.jdbc.support.SQLErrorCodes">
<bean id="MySQL" class="org.springframework.jdbc.support.SQLErrorCodes">
<bean id="MS-SQL" class="org.springframework.jdbc.support.SQLErrorCodes">

스프링에선 많은 BeanFactory를 제공하고.. 그중에 몇개만 사용해본지라..
다음에 DefaultListableBeanFactory 이놈에 대해서 살펴봐야 겠다..ㅋㅋ

무튼 정리 하자면 ;;; xml에 정의된 빈들을 생성하여 Map  형태로 .. 돌려 줌을 알수 있다..
그리고 에러코드를 꺼내쓸때에는 .. 디비 이름으로 찾아내는데.. xml에서도 볼수 있듯이 빈의 id가 db이름인걸 알수 있다..
그래서 에러가 났을때;; 디비이름을 가지고... sqlErrorCodes 라는 놈을 거내와서 사용하는듯하다~

일단 에러가 났을때.. 이 팩토리를 이용해서 뭐 어떻게 꺼내서 쓰는지 보지는 못했지만.. 시간날때 틈틈히 스프링 소스까보기를 진행해봐야 겠다~;; 대박나라~ Spring~ㅋㅋ

이 내용은 100% 나의 추측들로 작성된 글이다.. ;; 100% 맞게 설명했다고는 볼수 없을 것 같다..;; 기억보존용 POST이기도 하고~
아~ 그냥 이런놈들이 있구나~ 하면서 눈팅용으로 작성된 글임을... 잊지 말길 ..
어여 하루 빨리 ~ 완벽 소스 이해를 하는 날이 왓으면........ 하면서~~~~~~~~~ !!
Posted by is윤군