[Java] Загрузка dll

Nikitin

Существует некий native метод MyClass.getOrigin к примеру. Для него подгружаю написанную на C++ dll-ку mydll.dll с помощью System.loadLibrary("mydll"); в статической инициализации класса.
Все работает нормально, а проблема состоит в следующем:
Все это крутится на сервере приложения, приходится частенько делать redeploy приложения, при этом сервер, видимо, загружая класс вновь, говорит, что библиотека уже загружена, однако метод getOrigin уже не вызывается (UnsatisfiedLinkError).
Инструментов для проверки загруженных динамических библиотек и выгрузки их не нашел.
как выйти из этой ситуации?

Hastya

Например, поместить MyClass на уровень сервера.
Но тогда смысл redeploy пропадает.
А метод статический или нет?

Nikitin

Например, поместить MyClass на уровень сервера.
Но тогда смысл redeploy пропадает.
Класс запакован в некий trali_vali.ear. В кач-ве сервера используется JBoss.
На уровень сервера - это куда?
Неужели действительно нет возможностей перезагрузить библиотеку?..
К тому же мне не вполне понятно, почему метод не находится, хотя библиотека уже подгружена (хоть и другим объектом ClassLoader).....

Hastya

На уровень сервера - это куда?
в lib?
просто в JBoss нестандартная модель загрузки классов, которая нарушает некоторые конвенции.
Unload library - это слишком OS-specific.
Предлагают, например, такой вариант:
> In all of Sun's jdk1.4 runtimes, native libraries are
> unloaded when (actually shortly after) the ClassLoader
> that loaded them is garbage collected.
>
> In theory you have no control over when the garbage
> collection happens, but in practice calling
> System.gc and System.runFinalization several times
> will force it.

Cм. также остальное.

psm-home

Еще это прочти, может чего полезного найдешь для своего случая.
Оставить комментарий
Имя или ник:
Комментарий: