-
jco3 연동 시 no sapjco3 in java.library.path exception 대응기 (삽질기;;;)초급 개발자 이야기/노하우 쌓아가기 2012. 11. 19. 00:27
이 카테고리에는 더 이상 글이 올라오지 않습니다.
별도의 개발 블로그를 열어 개발에 관련된 이야기는 블로그를 분리하였습니다.
만약 더 많은 개발 이야기가 보고 싶으시다면 아래 링크로 이동해 주세요.
link : Digital Blue Eye's dev-ops
#######################################################################################################
이번 고객사에서 데이터를 SAP에서 jco3 연동으로 끌고 오는 과제가 있었습니다.
로컬 테스트 완료 후 실서버에서 실행 시
no sapjco3 in java.libaray.path
위와 같은 exception이 발생했습니다.
우선 로컬에서 jco3를 연동하기 위해서 아래와 같은 작업이 수행되었습니다.
- sapjco3.jar 라이브러리 연동
- 윈도우 설치 위치/system32에 sapjco3.dll 설치
실서버에서 다른 점은 sapjco3.dll이 없다는 것이죠. 이는 미리 실서버에 sapjco3.so라는 형태로 설치 및 설정이 되어 있는 상태입니다.
위의 exception이 발생되는 이유는 java vm이 올라오는 상태에서 sapjco3.so 라이브러리를 읽어들이지 못하는, 혹은 정상적인 sapjco3.so 라이브러리가 아닌 경우입니다.
제 경우에는 application을 실행하고자 하는 사용자에게 해당 설정이 되지 않은 것이 문제였습니다.
하지만 실서버의 사용자에게 해당 설정을 주는 것은 월권이라서, 실행 스크립트에서 설정하는 것으로 하였습니다.
초기 실행 스크립트에서의 명령은 아래와 같습니다.
$JAVA_PATH/bin/java -Xms256m -Xmx1024m com.prompt.srm2.batch.BatchName $1 $2
위의 실행 스크립트는 아래와 같이 변경되면 됩니다.
$JAVA_PATH/bin/java
-Djava.library.path=sapjco3.so설치위치/sapjco3.so
-Xms256m -Xmx1024m com.prompt.srm2.batch.BatchName $1 $2이렇게 해서 실행이 되었을까요??
그랬다면 삽질기가 아니죠... ㅜㅜ
역시나 마찬가지의 exception이 떨어집니다.
java.library.path를 지정하는 방법은 두가지 정도로 나뉠 수가 있습니다. 위와 같이 실행 시 지정해주는 방법과 shell에 등록하는 방법입니다.
shell에서 지정할 때는 LD_LIBRARY_PATH 를 지정하여 사용할 수 있습니다.
set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:sapjco3설치위치 (솔라리스 계열)
set SHLIB_PATH=$SHLIB_PATH:sapjco3설치위치 (HP-UX 계열)
위와 같이 스크립트가 실행될 때 path를 지정했습니다.
역시나 exception이 떨어집니다.... oTL
이걸로 이미 삽질은 4시간을 넘어가고.....
그러다 간과한 사실 한가지가 번뜩 생각이 났습니다.
서버니까 64bit 아닌가??
OS 정보를 다시 확인해 보니.... 64bit 이군요.... 아후......
실행 스크립트를 다시 수정합니다.
$JAVA_PATH/bin/java
-d64
-Djava.library.path=sapjco3.so설치위치/sapjco3.so -Xms256m -Xmx1024m com.prompt.srm2.batch.BatchName $1 $2넵. 64bit로 실행되도록 옵션을 줍니다.
이제 정상으로 실행됩니다... oTL
인터넷 상에도 여러가지 방법으로 path를 지정해 주었음에도 실행에 실패하신 분들이 많으신 것 같은데 관련 내용은 정리되어 있는 것이 없네요.
제 삽질을 참고로 다른 많은 개발자 분들이 삽질없이 시간을 벌으셨길 기대하면서 삽질기를 마무리 합니다.... ㅜㅜ
'초급 개발자 이야기 > 노하우 쌓아가기' 카테고리의 다른 글