気付けば簡単なことなのですが、気付けずに1人でハマってたことをメモします。
64bitマシンなのに32bitのJVMを使う理由
64bitマシンを利用している際、通常は64bit対応のライブラリを揃えて開発すると思いますが、私の場合、ある悲しい都合上、32bitのJNIライブラリを利用する必要が出てしまいました。
なので普通の方は読み飛ばして頂いて良いエントリだったり(^^;
で、このJNIライブラリのラッパーを作成する際に躓いたことは過去エントリ「64bitのJVMで32bitのJNIライブラリを動かしたら…」でまとめてます。
で、薄々わかっていたことですが、上記ラッパーはJava SEで作り、jarで固めてます。
実際にこれを利用するのはサーバサイドJavaですので、参照で組み込んで利用する形となります。
で、当然ながら、64bitマシンでNetBeans7.3使ってGlassFish3.1.2.2を起動すると…
Can't load IA 32-bit .dll on a AMD 64-bit platform
のエラーが出ます。
ここから
なにをやっても変わらず、ゼエハア…( *`ω´)
で、最終的にたどり着いたのは以下の設定をするだけ、ということでした…。
NetBeans -> ツール -> サーバーの「Java」タブに気づかなかった…orz
知っている方からすれば「アホやな」という所かと(-_-;
UnsatisfiedLinkError
上記問題が解決して、やったーエラーなくなって起動したー、と喜んだのもつかの間、実際にライブラリを利用するタイミングで今度は「java.lang.UnsatisfiedLinkError」が出ました。
何かの本か記事で読んだ「JUnitでテスト通ってもWebにしたら動かなかったというのはよくある話」というのが頭に…(^^;
試しにこちらのサイト(JNIのエラー)にあるSystem.loadLibraryで、dllを書いてみた所、動きました。
ので、dllファイルがGlassFishのClassLoaderから見つかっていないという…。
色々調べていたら、以下サイトにGlassFishでnative library path prefixというのが出てきました。
GlassFishの管理コンソールでも設定できるっぽいですね。
でも結局、以下の情報を参考にNetBeansから起動したGlassFishのdomain配下のlibにdllを呼ぶjarを配置して対応しました。
ふぅ…。