Техническое резюме: я разрабатываю веб-сервис Java, развернутый на GlassFish v3 и работающий на CentOS 5.
Мой веб-сервис использует функции, предоставляемые собственной библиотекой (.so). Нативная библиотека работает нормально, однако мне не очень повезло в правильной настройке среды для загрузки нативной библиотеки, но она не будет затронута повторным развертыванием веб-приложения без перезапуска сервера приложений.
То, что я сделал до сих пор:
Изначально я загрузил библиотеку (static {System.load (path / to / libabc.so)});) в коде веб-службы, все пути заданы правильно, и все работает нормально, пока я не переустановлю приложение и не он жалуется, что библиотека загружается другим ClassLoader. Я обнаружил, что нативные библиотеки загружаются только один раз.
Чтобы попытаться решить эту проблему, я затем удалил код загрузки библиотеки из веб-приложения, создал класс Singleton, обернул его в модуль Lifecyle, развернул его в общей папке lib GlassFish и затем настроил GlassFish для запуска оболочки, когда он запускает. Идея заключается в том, что теперь все веб-приложения смогут ссылаться на него, поскольку он не привязан к какому-либо конкретному веб-приложению и загружен ClassLoader выше в иерархии.
Когда GlassFish запускается, нативная библиотека успешно загружена (linux> lsof | grep libabc.so). Однако код веб-службы завершается с ошибкой UnsatisfiedLinkError при выполнении нативного метода в моем коде Java веб-службы. Мне кажется, что код в веб-приложении не имеет доступа к библиотеке, загруженной при запуске.
Может кто-нибудь сказать мне, что я делаю не так?
Заранее спасибо.