2010년 1월 28일 목요일

CXF + JDK1.6 + Spring 개발 하기 Part2 (CXF에서 "endorsed" 디렉토리 설정)

이글을 읽기전에 반드시 "CXF + JDK1.6 + Spring 개발 하기 Part1"
를 꼭 읽어 보시기 바랍니다.
CXF 메이븐 설정이 끝나고 한가지 설정을 더해야 합니다.
제가 테스트를 하는데 집에서 설정할때는 에러 없이 톰캣 서버가
올라왔는데 이상하게 회사에서 하면 JAXB 에러가 나면서
서버로 올라오지 않는 증상이 발생했습니다.
혹시나 라이브러리 문제인지 CXF .2.2 바이너리 버전을 다운 받아서
안에 있는 "lib" 폴더에 있는 라이브러리를 설치했는데도
여전히 에러가 발생했습니다. 혹시나 이클립스 문제,WTP 문제
쌩 삽질을 해도 방법이 없었습니다. 하루종일 삽질후
원인을 알게 되었습니다. 집에 있는 PC는 JDK1.5가 설치
되어 있고 , 회사 PC에는 JDK1.6이 설치가 되어 있었습니다.
왠 JDK 버전 탓이냐 결론은 맞습니다.
  • JAXB 버전 충돌 문제
CXF 2.1.X 이상 버전부터는 내부적으로 JAB2.1을 사용하게
되어 있습니다. 하지만 JDK1.6 스펙을 확인결과 JDK1.6
에서는 JAXB2.0을 내장으로 포함이 되었습니다.
그래서 라이브러리 충돌이 발생이 되었습니다.
JDK1.5는 당근 JAXB를 포함하지 않았기 때문에 CXF에서 제공하는
JAXB2.1 라이브러리 충돌없이 사용 했었던 것입니다.

  • 해결 방법은 "endorsed" 디렉토리
그래서 해결 방법은 "endorsed" 디렉토리를 생성 해야 한다는 것
입니다.
"endorsed" 디렉토리는 JVM이 기동될때 JDK에서 제공하는라이브러리
보다 먼저 인식을 해서 올리는 디렉토리 입니다.

  • "endorsed" 디렉토리 생성 방법
"endorsed" 위치는 기본적으로 "%JAVA_HOME%\lib" 입니다.
해당 위치로 가면 "endorsed" 디렉토리가 없을 것입니다.
그래서 수동으로 디렉토리를 생성 해야 합니다.
그렇지 않으면 WAS 기동 스크립트에 아래의 스크립트를
추가 하시면 됩니다.
-Djava.endorsed.dirs="endorsed 디렉토리 위치"
예)
-Djava.endorsed.dirs="C:\Project\tomcat\6.0\endorsed"

저 같은 경우는 개발할때는 아래와 같이 이클립스 서버탭에서
톰캣 환경 설정에 정의된 곳에 "endorsed"디렉토리를 생성하고
운영 서버에는 %JAVA_HOME%\lib"에 해당 디렉토리를 생성
합니다.




  • JAXB2.1 라이브러리 복사
"endorsed" 디렉토리가 생성이 되면 CXF 바이너리 버전을 다운로드 후
"lib" 디렉토리에서 아래와 같은 파일을 "endorsed" 디렉토리로
복사 합니다.

jaxb-api-2.1.jar
jaxb-impl-2.1.12.jar
jaxb-xjc-2.1.12.jar

댓글 없음:

댓글 쓰기