Ошибка Java. Собственная библиотека уже загружена в другой загрузчик классов

Я использую библиотеку java bonjour (dns_sd.jar) в веб-приложении, работающем на веб-сервере Jboss.

Когда я запускаю сервер, сервлет находит каждый ресурс в сети с bonjour и возвращает пользователю. В первый раз все работает отлично, но когда я повторно развертываю веб-приложение, я получаю:

java.lang.UnsatisfiedLinkError: Собственная библиотека C:\Windows\System32\jdns_sd.dll уже загружена в другой загрузчик классов

Я уже пытался удалить .dll, и происходит то же самое.

Почему он даже ссылается на .dll, если у меня есть библиотека .jar в моем веб-приложении?

Кто-нибудь знает, как это исправить?


person out_sid3r    schedule 29.02.2012    source источник


Ответы (2)


вы выполняете отмену развертывания перед его повторным развертыванием. вам не нужно удалять файл dll, это совсем не связано с вашей ошибкой. это ошибка java и jboss. проблема в том, что когда вы переустанавливаете его, он не может выгрузить библиотеки, которые вы загрузили на время первоначального развертывания. поэтому лучше проверить, загружена ли библиотека или нет, прежде чем загружать библиотеку в следующий раз, если она уже загружена, не загружайте библиотеку.

person johnkrishna    schedule 29.02.2012
comment
Большое спасибо за помощь... но я пытался отменить развертывание и снова развернуть, но работает только перезапуск сервера... что довольно болезненно, учитывая время, необходимое для развертывания других приложений, которые мне нужны. Есть ли способ выгрузить библиотеку, если она уже запущена в java-функции? Потому что я не знаю, как сказать bonjour не загружать его снова. - person out_sid3r; 29.02.2012
comment
Хотя я не получил полного ответа... по крайней мере, я получил подтверждение... хотя и не решение - person out_sid3r; 06.03.2012
comment
Вы уже нашли какое-нибудь решение? - person v4r; 22.05.2013

Если вы используете JBoss 7, попробуйте переместить файл jar, который использует dll, в модуль JBoss. Перезапустите JBoss, чтобы он подхватил модуль. Измените файл MANIFEST.MF, чтобы он содержал «Зависимости: theNameYouGaveIt».

Где «theNameYouGaveIt» — это имя, которое вы выбрали в файле «yourModule/main/module.xml» вашего модуля.

Таким образом, JBoss не перезагружает библиотеку снова и снова. Затем снова и снова удаляйте/повторно развертывайте свой .ear или .war.

person Jared    schedule 05.02.2013