기존 iBatis를 사용하는 전자정부프레임워크를 myBatis로 컨버팅중에 나온 오류.


returnType="egovMap" 로 선언된 부분에서 Data가 있음에도 불구하고 리턴되지 않아 한참을 고생.


<typeAlias  alias="egovMap" type="egovframework.rte.psl.dataaccess.util.EgovMap"/>


<select id="BBSManageDAO.selectList" returnType="egovMap">

...

</select>


iBatis에서는 정상으로 작동하지만 myBatis에서는 정상작동하지 않습니다.

원인은 myBatis에 추가되는 option설정때문인데요....(iBatis에서는 이 설정이 없는듯 합니다.)


sqlMapConfig.xml 에 다음과 같이 추가합니다.

<configuration>

    <typealias .../>


    <settings>

        <setting name="mapUnderscoreToCamelCase" value="true"/> <== default는 false 임

<setting name="jdbcTypeForNull" value="NULL"/> <== NULL 처리를 위해 NVL, IFNULL 등을 하지 않아도 됨

    </settings>


</configuration>


myBatis에는 의외로 많은 설정들이 존재합니다.  

바꿔말하면 아래의 다양한 옵션들을 환경하에서 개발하다가 Default로 설정된 환경에서 변경할 경우 이전에 잘 돌아가던 코드가 제대로 작동을 하지 않는 경우가 발생할텐데, 이러한 설정의 차이를 인지하지 못할 경우 낭패(엄청난 삽질)를 당할수 있다는 것입니다. 

꼼꼼히 보고 체크해야 할듯 합니다.


아래는 링크는 mybatis공식페이지에 정의된 매퍼설정내용들입니다.


http://www.mybatis.org/mybatis-3/ko/configuration.html

.




1. SpringFramework기반 프로젝트 중 우연치 않게 발견한 내용입니다.

공통 기능을 jar로 배포하고 확장기능만 개발하는 형태로 되어 있는 프로젝트를 운영서버에 배포를 했으나 Mapper Interface BindingExceptin이 발생하고 해당 Interface가 not Known 으로 나오는 현상이 발생한겁니다.

 

해당 프로젝트를 개발자 eclipse에서 실행하면 아무 이상없이 정상적으로 실행되는데, 운영서버에 배포만 하면 동일한 오류가 발생하는 것입니다.

 

결론은 개발자 한명이 해당 mapper Interface package를 생성하고 이곳에 Mybatis query xml을 위치시킨것입니다.

해당 package는 jar에서 사용하는 동일한 package이고 권장하지 않는 사용법이었습니다.

이를 바로잡는다고 해당 패키지 밑에 있는 xml은 WE-INF/sqlmap/ 이하로 옮기는 migration 시킨것입니다.

그러면서 정상 package는 삭제하지 않은것입니다.

 

xml 에 설정된 component-scan 에의해 해당 패키지를 scan한것입니다.

 

여기서 왜 eclipse에서는 정상작동했는데, 운영서버에서는 오류를 냈느냐는 것입니다.

차이는 class파일 loading순서에 따른 것이었습니다.

 

eclipse는 class loading 순서를 임의로 조정할수 있지만 실제 운영환경에서는 was에서 지정하는 순서에 의해 Loading된것입니다.

즉, 운영환경 WAS 기반하에서는 jar 파일에 있는 class보다 WEB-INF/classes 이하에 위치한 class파일을 우선시 하는데 비해

eclipse는 Project 설정에서 Java Build Path ==> Order and Export 탭에서 이를 자유롭게 조정할수 있는 것입니다.

 

추가 확인 및 연구사항

 

1. 좀더 세밀하게 접근하면 이후부터는 ClassLoader를 이해해야 합니다.

이부분에 대해서는 별도 구글링을 통해 알아보면 도움이 될듯 합니다.

 

2. 그리고 또하나 패키지만 선언해놓고 class 파일을 만들지 않은 경우에 eclipse가 이를 어떻게 처리하는지 확인해 봐야할 듯합니다.

  운영서버 war로 export 하게 되면 빈 패키지도 classes 이하에 그대로 생성되기 때문에 ClassLoader가 이를 로딩해버립니다.

 

Spring component-scan도 이 class loader에 의한 것이라 여겨지기에 비슷하게 작동한듯 합니다.

(이부분 조금더 정확하게 확인 필요)

 

 



Invalid LOC header(bad signature) 오류

Posted 2015. 10. 19. 15:07

 

한동안 개발을 하지 않고 개발이 마무리 되어가는 결과물을 테스트를 하려고 개발환경 구성하는데, 자꾸 오류가 난다.

개발자 PC에선 문제가 없고, 동일한 환경으로 eclipse도 구성했는데, 여전히 알수 없는 오류가 발생...

 

주로 Maven 플젝환경에서 나오는 현상이다.

Repository를 이전 개발환경 때부터 삭제하지 않고 공유해서 사용하고 있었는데, 이부분때문이라고 한다.

문제가 되는 jar 파일의 경로를 찾아서 삭제하고 다시 Maven update를 하면 정상적으로 빌드가 된다.

 

 



« PREV : 1 : ··· : 9 : 10 : 11 : 12 : 13 : 14 : 15 : ··· : 61 : NEXT »