그냥 사는 이야기

OSGi Bundle-NativeCode로 dll 로드하기 본문

Development/개발언어

OSGi Bundle-NativeCode로 dll 로드하기

없다캐라 2010. 5. 14. 16:15
반응형

OSGi Bundle-NativeCode로 dll 로드

System.LoadLibrary()를 사용하여 native code를 JNI로 연결하여 사용하려고 할 경우 OSGI 경우에서는 약간의 문제가 있다.

dll을 jvm에서 load 하여 사용할 경우 jvm이 restart 되지 않는 이상 dll을 unload 못시킨다고 한다.

구글링을 해보니 만약, unload 시키려고 할 경우는 편법적인 방법을 사용하여 unload 시키네 마네 하지만 보장할 수 있는 방법은 아닌것 같다.

OSGi는 번들을 동적으로 load/unload 하여 deploy 시킬 수 있는 플랫폼이다. 이런 OSGi의 dynamic 함이 jvm의 dll load와 같이 설치는 가능하나 삭제는 극히 힘든 타입의 방식을 만나면 어떻게 처리될까? 그것이 Bundle-NativeCode 이며, OSGi에서 제안한 방법이다.

Bundle-NativeCode: lib/test.dll; osname=Win32; processor=x86​

이런 형태로 지정하여 놓고 dll을 System.LoadLibrary()을 하면 2가지 문제가 해결된다.

  1. 위의 번들을 re-deploy 해도 dll load가 된다. 번들을 uninstall 하고 난 후 실제로 jvm에서 dll이 unload 되었는지는 확인해볼 수 없지만 개발자 입장에선 dynamic 함이 가능하게 보인다.
  2. System.LoadLibrary()으로 load 함으로 system path에 등록된 경로를 뒤지는 코드는 집어 넣지 않아도 된다. 저렇게 lib 폴더 밑에 test.dll을 집어넣으면 System.LoadLibrary("test") 라고 하면 바로 된다.

^^하지만 과연 쉽게 쓸 수 있을까?

Comments