0

ネットワーク統計を表示する組み込みデバイス用のWebインターフェイスを構築しようとしています。Glassfish 3.1 Application Serverを使用していますが、jnetpcapを使用してネットワークトラフィックをリッスンしたいと思います。jnetpcapはlibpcapネイティブライブラリに依存しています。Glassfishでのネイティブライブラリの使用に関するOracleのドキュメントを見つけようとしましたが、探しているものがまだ見つかりません(間違ったものを探している可能性があります)。

サーブレットがロードされると、次のように失敗します。

原因:java.lang.NoClassDefFoundError:クラスorg.jnetpcap.Pcapを初期化できませんでした

これは、クラスローダーがクラスを見つけることはできるが(デプロイ時にライブラリとして指定した)、ロードできないことを意味すると解釈します。私の最初の推論は、それがセキュリティポリシーの問題であったか、jvmがlibpcap.soを見つけられなかった可能性があるというものでした。

Configurations-> server-config-> jvm-settingsを使用して、管理コンソール(つまり、Webインターフェイス)でsystem.library.pathのパスを設定しました。[パス設定]タブで、パス'/usr/bin/libpcap.so'を[ネイティブライブラリのパスサフィックス]フィールドに入力します。Glassfishサーバーを再起動すると、次のメッセージが表示されました。

[#| 2011-03-31T13:30:13.962 +1100|警告|glassfish3.1| null | ... GlassFishConfigBean.com.sun.enterprise.config.serverbeans.JavaConfig}、reason=JavaConfig属性「NativeLibraryPathSuffix」が「null」から「/usr/bin/libpcap.so」に変更されました。=1301538613961|#]

その後、ログでネイティブライブラリパスがパス出力に表示されます

-Djava.library.path = ... /usr/lib64:/lib64:/lib:/usr/lib:/usr/bin/libpcap.so

したがって、ネイティブライブラリは正常にロードされていると思います。ネイティブライブラリが実際にロードされていることを確認する方法はありますか?

また、セキュリティマネージャを無効にしました(当面の間、サーブレットを機能させるためです。動作したら、より微妙なセキュリティポリシーを実装する予定です)。これでも問題は解決していません。

ネイティブライブラリを正しくロードしようとしていますか?ネイティブライブラリがロードされているかどうか、およびorg.jnetpcap.Pcapクラスを初期化できない理由についての詳細を知るにはどうすればよいですか?

ありがとう、ティム

4

1 に答える 1

0

わかりました、解決しました。

問題は、jnetpcap が libpcap.so ではなく libjnetpcap.so に依存していたことです。私の間違い。

JVM Path Settings の Native Library Path Suffix フィールドにパスの正しいパス (/stuff/ ... /libjnetpcap-1.3.b4) を追加し、すべてのシステムが行きました。

于 2011-03-31T10:33:03.363 に答える