본문 바로가기
마린일병의 열정이야기/etc.

[Java][JCO] JCO기반의 SAP 연계 기능 개발시 발생한 에러 - Not found in java.library.path

by 마린일병 2019. 9. 5.
반응형

JCO Library를 사용해서 SAP 연결하여 상태를 점검하는 모듈을 개발 하던중  'Not found in java.library.path' 에러가 발생하여 하루반나절 삽질하여 얻은 결론에 대해서 썰을 풀어봐야지...

 

Window에서 개발할때 에러메시지는... 

'java.lang.UnsatisfiedLinkError : no sapjco3 in java.library.path'

 

AIX에서는...

'java.lang.UnsatistiedLinkError: sapjco3 (Not found in java.library.path)'

메시지가 시사하는건 일반적인 java library(sapjco3.jar, 이건 당빠 클래스패스 잡아줬고...)를 못찾는게 아니라... 윈도우 기준 네이티브 라이브러리(libsapjco3.so)... AIX 기준 공유 라이브러리(libsapjco3.so)를 못찾는다는 이야기...

 

자세한건 잘 모르지만... 아래 그림 한방으로 설명이 가능할듯 한데...

내부 아키텍쳐는 잘 모르겠지만... 어찌됐던 java application에서 SAP에서 제공하는 JCO library를 이용하여 SAP랑 연결되는데...

이게 구동되는 OS에 영향이 있고... 앞서 말한것 처럼 sapjco3.jar 외 윈도우에서는 sapjco3.dll... aix에서는 libsapjco3.so 형태로 배포가 되어 있어야 함...

 

문제는 우리 귀요미 java app에서 이걸 못쓴다는 거잖아...

그람 우짜지...?

 

자 그럼... jvm에다... 저 삐뚤어진 친구들이 있는 위치를 알려줘야지...

windows 계열 OS나 linux, HP-UX 에서 구동되는 hotspot계열 JVM은 아래와 같이 프로세스 기동시 jvm parameter 형태로 지정해 줄 수 있다.

-Djava.library.path=[네이티브 라이브러리 배포위치]

ex) -Djava.library.path=D:\sapjco

 

그럼 AIX 환경에서는? (사실 로컬에서 테스트 다하고 서버 올려서 실제 기동시 이것 때문에 고생을 많이 했다.)

IBM JVM은 Hotspot JVM에서 사용한 jvm parameter로 공유 라이브러리 경로를 지정해줄 수 없다.(실제 있는지 모르겠지만 난 방법을 발견하지 못했다.)

구글링과 테스트를 통해 확인해본 결과... AIX에서는 LIBPATH 라고 하는 OS Shared Library 환경변수에다 설정을 해야한다...(AIX 버전에 따라 LD_LIBRARY_PATH 환경변수를 설정해야 할 수도 있음)

사용하는(java application을 기동 시킬)유저의 로그인쉘 환경설정파일에 해당 설정을 하면 되는데...

난 csh를 선호하니까... 우리 유저의 home directory에 (숨겨져)있는 .cshrc 파일에 아래와 같이 추가한다.

setenv LIBPATH /usr/lib:[jco 공유 라이브러리 파일 배포경로]

 

다른 shell을 쓰고 있다면... 요렇게 해야겠지...

export LIBPATH=/usr/lib:[jco 공유 라이브러리 파일 배포경로]

 

자... 개발끝~~~!!!

 

※ /usr/lib 가 포함되어 있는 이유는 java app내 다른 로직에서 다른 공유 라이브러리를 쓸지도 모르기 때문에 

    추가한거임... 내꺼에서는 안쓰기는 하는데... ^^

 

※ [마린일병의 세상 사는 이야기...!]에서 이전해옴

728x90

댓글