2015年1月10日土曜日

サーブレットでネイティブライブラリを使う方法

サーブレットでネイティブライブラリをロードする方法についてメモしておきます.

java.lang.Systemクラスのloadメソッドを使うと,Webアプリケーションの範囲外に特別な設定をせずにネイティブライブラリをロードすることができます.例えば,OpenCVのネイティブライブラリが,次のように配置されている場合,

/opt/local/share/OpenCV/java/libopencv_java2410.dylib
java.lang.Systemクラスのloadメソッドを次のように記述すれば,そのライブラリをロードできます.
System.load("/opt/local/share/OpenCV/java/libopencv_java2410.dylib");

Javaアプリケーションの場合,ソース内では,java.lang.SystemクラスのloadLibraryメソッドを使い,

System.loadLibrary("opencv_java2410");
javaコマンドのオプションでネイティブライブラリのディレクトリを指定すればよいのですが,
java -Djava.library.path=/opt/local/share/OpenCV/java/ ...
これをjava.lang.SystemクラスのsetPropertyメソッドを使って肩代わりさせようとすると,ライブラリのロードに失敗します. どうも「java.library.path」の値は,起動時のものが使われるようで,その後に内容を変更しても使われないみたいです.

そういうわけで,Webアプリケーションで閉じた方法を探していたところ,上記の方法にたどり着きました. 絶対パスが入っているので,環境依存にはなるのですが(必要なら動的に変更できるようにすればいいし), アプリケーションサーバの設定を触らなくていいので,こちらのほうが自分の好みに合います.

0 件のコメント: