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내 다른 로직에서 다른 공유 라이브러리를 쓸지도 모르기 때문에
추가한거임... 내꺼에서는 안쓰기는 하는데... ^^
※ [마린일병의 세상 사는 이야기...!]에서 이전해옴
'마린일병의 열정이야기 > etc.' 카테고리의 다른 글
[기타] 애드센스 주소 확인 및 PIN 번호 인증 (0) | 2021.08.20 |
---|---|
[수학][행렬] 전치행렬 (0) | 2020.03.15 |
[DB][Oracle][SQL] 분석함수 NTILE - 검색결과 분할, 분위수함수 (0) | 2019.12.26 |
댓글