Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

NetBeans7.3からGlassFish3.1.2.2を32bitで起動する(JNIの都合上)

気付けば簡単なことなのですが、気付けずに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

のエラーが出ます。

ここから

  • JAVA_HOMEを32bitのJDKに変えてみたり
  • 環境変数Pathの中のJDKを32bitのパスにしたり
  • NetBeansを32bitで起動させるためにnetbeans.conf変えてみたり
  • GlassFishの設定だ!と思ってasenv.conf変えてみたり

なにをやっても変わらず、ゼエハア…( *`ω´)

で、最終的にたどり着いたのは以下の設定をするだけ、ということでした…。

f:id:kikutaro777:20130226215851j:plain

NetBeans -> ツール -> サーバーの「Java」タブに気づかなかった…orz

知っている方からすれば「アホやな」という所かと(-_-;

UnsatisfiedLinkError

上記問題が解決して、やったーエラーなくなって起動したー、と喜んだのもつかの間、実際にライブラリを利用するタイミングで今度は「java.lang.UnsatisfiedLinkError」が出ました。

何かの本か記事で読んだ「JUnitでテスト通ってもWebにしたら動かなかったというのはよくある話」というのが頭に…(^^;

試しにこちらのサイト(JNIのエラー)にあるSystem.loadLibraryで、dllを書いてみた所、動きました。
ので、dllファイルがGlassFishのClassLoaderから見つかっていないという…。

色々調べていたら、以下サイトにGlassFishでnative library path prefixというのが出てきました。

GlassFishの管理コンソールでも設定できるっぽいですね。

f:id:kikutaro777:20130226220148j:plain

でも結局、以下の情報を参考にNetBeansから起動したGlassFishのdomain配下のlibにdllを呼ぶjarを配置して対応しました。

ふぅ…。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村