2011-03-31 31 views
0

我正在尝试为嵌入式设备构建一个Web界面,该界面将显示网络统计信息。我正在使用Glassfish 3.1应用程序服务器,并且我想使用jnetpcap来监听网络流量。 jnetpcap依赖于libpcap本地库。我试图从Oracle中找到有关使用Glassfish的本地库的文档,但是我还没有找到我正在寻找的东西(并且我可能正在寻找错误的东西)。如何使用Glassfish 3.1本机.so

当我的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},reason = JavaConfig属性'NativeLibraryPathSuffix'已从'null'更改为'/usr/bin/libpcap.so',when = 1301538613961 |#]

,后来在日志中的机库路径轮番上涨的路径输出

-Djava.library.path = ...在/ usr/lib64下:/ lib64目录:/ lib目录:/ usr/lib中:在/ usr /bin/libpcap.so

所以我认为本地库正在成功加载。有没有一种方法可以检查本机库是否真的被加载?我也已经禁用了安全管理器(就目前而言,试图让servlet工作;我计划在其工作后实施更微妙的安全策略),但这也没有解决问题。

我想正确加载本机库吗?我怎样才能找到更多关于本地库是否被加载的信息,以及为什么org.jnetpcap.Pcap类不能被初始化?

感谢, 添

回答

0

好了,解决了。

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

将路径正确路径(/ stuff/... /libjnetpcap-1.3.b4)添加到JVM路径设置的本机库路径后缀字段中,并且这是所有系统都去的。