0

我正在尝试为嵌入式设备构建一个 Web 界面,它将显示网络统计信息。我正在使用 Glassfish 3.1 Application Server,我想使用 jnetpcap 来监听网络流量。jnetpcap 依赖于 libpcap 本机库。我试图从 Oracle 中找到有关在 Glassfish 中使用本机库的文档,但我还没有找到我想要的东西(而且我可能正在寻找错误的东西)。

当我的 servlet 加载失败时

原因: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},原因 = JavaConfig 属性“NativeLibraryPathSuffix”从“null”更改为“/usr/bin/libpcap.so”,当 = 1301538613961|#]

稍后在日志中,本机库路径出现在路径输出中

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

所以我认为本机库已成功加载。有没有办法可以检查是否确实加载了本机库?

我还禁用了安全管理器(只是暂时尝试让 servlet 工作;我计划在它工作后实施更微妙的安全策略),这也没有解决问题。

我是否正在尝试正确加载本机库?我如何才能找到更多关于是否加载了本机库以及为什么无法初始化 org.jnetpcap.Pcap 类的信息?

谢谢,蒂姆

4

1 回答 1

0

好的,解决了。

问题是 jnetpcap 依赖于 libjnetpcap.so 而不是 libpcap.so。我的错。

将路径正确的路径(/stuff/ ... /libjnetpcap-1.3.b4)添加到 JVM Path Settings 的 Native Library Path Suffix 字段中,所有系统都可以运行。

于 2011-03-31T10:33:03.363 回答