2011-11-07 24 views
0

私はJava.lang.Systemにいくつかのネイティブコードを呼び出すカスタムメソッドを実装しました。私はbootclasspathを使ってこのクラスをJavaのブートストラップで見つけ、jdkのlibパスにネイティブライブラリを置きます。これは、正常なJavaアプリケーションのために完全に正常に動作しますが、私はこれをtomcatの下で実行したいと思います。tomcatブートストラップローダーのネイティブライブラリ

jdkのlibとtomcatの共有/ libの両方にライブラリを配置しましたが、動作していないようです。 UnsatisfiedLinkError:ネイティブライブラリが既に別のクラスローダに読み込まれています。 Tomcatが独自のブートストラップローダーを使用しているかどうかは不明です。

いずれにしても、ブートストラップクラス(rt.jar)の独自のネイティブライブラリを取得してTomcatをロードするにはどうすればよいですか?

答えて

0

JAVA_OPTS環境変数を使用して、任意のJVMパラメータを指定できます。この環境変数で通常のJavaアプリケーションに使用したのと同じパラメータを使用し、Tomcatがそれらを取得する必要があります。ネイティブライブラリをTomcatのパスから外して、1回以上ピックアップされないようにしてください。

+0

「Tomcatのパスからネイティブライブラリを保持してください」...これについて詳しく説明できますか?また、ネイティブへのメソッド呼び出しもUnsatisfiedLinkErrorで失敗するため、ライブラリが一度ロードされたかどうかはわかりません。 – akula1001

+0

@ manu1001私は、Tomcatのディレクトリからすぐに立ち去るときに、ネイティブライブラリよりJARの方が多く考えていました。スタンドアロンJavaアプリケーションでネイティブライブラリをロードするために使用するJVMパラメータは何ですか? -Djava.library.path = <ネイティブライブラリへのパス>を使用して、JAVA_HOME経由でjava.library.pathシステムプロパティを設定すると動作する場合があります。 – prunge

+0

このライブラリはブートストラップクラスによってロードされるため、java.library.pathは設定されません。 javaは、ブートストラップクラスのネイティブをロードするためにsun.boot.class.pathを使用します。しかし、これは[この問題]のために設定することはできません。(http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4285197)私はlibをすでに定義されているboot.class.pathに置きました。スタンドアロンJavaでは動作しましたが、Tomcatでは動作しませんでした。 – akula1001

関連する問題