2011-03-31 61 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路徑設置的本機庫路徑後綴字段中,並且這是所有系統都去的。