카테고리 없음

java.library.path의 동적인 변경

lovian 2007. 3. 19. 14:11
자바가 아무리 이식성이 강력하다지만, 어떠한 경우에는 JNI를 쓰는 상황을 피할 수 없을 때가 있다.
내가 직면한 상황은 다음과 같다.
동일한 라이브러리지만, 다른 버젼의 라이브러리를 호출하는 두 제품이 있고,
이 제품을 동시에 사용하는 솔루션이 있다.

모든 제품들이 자바로 되어있었고, 각각 JNI 라이브러리를 호출하기 때문에 java.library.path 를 잡아주는 것은 필수적인 조건이다.


문제는 여기서 발생한다. 각각의 제품을 사용하려면 java.library.path를 잡아줘야하는데,
각각의 제품이 서로 다른 java.library.path 를 필요로 한다.
보통 솔루션이 실행되기 이전에 java.library.path 를 잡아주는데, 두 제품의 java.library.path를 잡아준다 해도, 먼저 찾아지는 라이브러리가 호출될 것이 뻔하므로, 두 제품 중의 하나는 맞지 않는 라이브러리가 호출 될 것이 뻔하다.

그 대한으로 java application 내부에서 System.setProperty( "java.library.path", "..." ); 를 호출하여 강제로 경로를 수정했지만, 적용은 안되었다.
googling을 하다가 ClassLoad를 de-compile 했다는 내용을 봤는데, ClassLoading 과정에서 라이브러리 환경을 설정하는 것으로 보였다.

과연 대안은 없을까?