Как использовать родной .so с Glassfish 3.1 - PullRequest
0 голосов
/ 31 марта 2011

Я пытаюсь создать веб-интерфейс для встроенного устройства, которое будет отображать статистику сети.Я использую сервер приложений Glassfish 3.1 и хотел бы использовать jnetpcap для прослушивания сетевого трафика.jnetpcap опирается на собственные библиотеки libpcap.Я пытался найти документацию от Oracle об использовании нативных библиотек со Glassfish, но я еще не нашел того, что искал (и, возможно, я искал не то).

Когда мой сервлет загружается, происходит сбой с

. Причина: java.lang.NoClassDefFoundError: Не удалось инициализировать класс org.jnetpcap.Pcap

, который, как я понимаю, означает, чтозагрузчик классов может найти класс (я определил его как библиотеку при развертывании), но не могу загрузить его.Мои первые выводы заключались в том, что это могло быть проблемой политики безопасности или что jvm не смог найти libpcap.so.

Я установил путь для system.library.path в консоли администратора (т. Е. В веб-интерфейсе), используя Configurations-> server-config-> jvm-settings.На вкладке «Параметры пути» я поместил путь «/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

, поэтому я думаю, что нативная библиотека успешно загружается.Есть ли способ проверить, действительно ли загружена нативная библиотека?

Я также отключил диспетчер безопасности (на данный момент, чтобы попытаться заставить сервлет работать; я планирую реализовать более тонкиеполитики безопасности, как только она заработает), и это также не устранило проблему.

Правильно ли я загружаю нативную библиотеку?Как узнать больше информации о том, загружена ли нативная библиотека и почему класс org.jnetpcap.Pcap не может быть инициализирован?

Спасибо, Тим

1 Ответ

0 голосов
/ 31 марта 2011

Хорошо, решено.

Проблема в том, что jnetpcap зависит от libjnetpcap.so, а не от libpcap.so. Виноват.

Добавлен правильный путь к пути (/ stuff / ... /libjnetpcap-1.3.b4) в поле Суффикс пути к собственной библиотеке в настройках пути JVM, и это все системы.

...