powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / External Classloader и glassfish/payara 4
5 сообщений из 5, страница 1 из 1
External Classloader и glassfish/payara 4
    #39533230
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В каталоге jdk/lib/ext есть файл JCPxml.jar, у нее есть зависимость от apache xml security (xmlsec-1.5.2.jar) - данная зависимость не кладется в jdk/lib/ext, а кладется в .war-ку

Под данной jdk запущен glassfish/payara.

В моем приложении.war есть sun-web.xml с class-loader delegate=false.

так, вот, если я не кладу JCPxml.jar в свою war-ку, то получаю ошибка NoClassDefFound файла из xmlsec.jar...

вывел логи класслоудера:

автор[Loaded my.package.Crypto from file:/opt/payara/payara41/glassfish/nodes/localhost-payaradomain/instance1/applications/MyWar/WEB-INF/lib/MyCryptoLib.jar]
[Loaded ru.CryptoPro.JCPxml.Consts from file:/usr/java/jdk1.8.0_60/jre/lib/ext/JCPxml.jar]
[Loaded ru.CryptoPro.JCPxml.XmlInit from file:/usr/java/jdk1.8.0_60/jre/lib/ext/JCPxml.jar]

Почему glassfish не грузит xmlsec-1.5.2.jar из war-ки? ведь стоит опция class-loader delegate=false?

Есть мысли, что в данном случае JCPxml.jar - подгрузил external classloader, соответсвенно xmlsec-1.5.2.jar - тоже должен искать он, а если не нашел (т.к. его нету в jdk/lib/ext), то передать системному класслоудеру и так до глассфишевского?
...
Рейтинг: 0 / 0
External Classloader и glassfish/payara 4
    #39533247
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваш параметр delegate не влияет на саму иерархиую загрузчиков вообще никак. Он только меняет очередность поиска. В иерархии же jdk/lib/ext является одним из родителей любых загрузчиков JEE контейнера. Поэтому классы JDK не могут напрямую видеть эти классы. Только через SPI и другие аналогичные механизмы.
...
Рейтинг: 0 / 0
External Classloader и glassfish/payara 4
    #39533254
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВаш параметр delegate не влияет на саму иерархиую загрузчиков вообще никак. Он только меняет очередность поиска. В иерархии же jdk/lib/ext является одним из родителей любых загрузчиков JEE контейнера. Поэтому классы JDK не могут напрямую видеть эти классы. Только через SPI и другие аналогичные механизмы.

по данной статье https://habrahabr.ru/post/103830/

автор1) Системный загрузчик попытается поискать в кеше класс Student.
_1.1) Если класс найден, загрузка окончена.
_1.2) Если класс не найден, загрузка делегируется загрузчику расширений.
2) Загрузчик расширений попытается поискать в кеше класс Student.
_2.1) Если класс найден, загрузка окончена.
_2.2) Если класс не найден, загрузка делегируется базовому загрузчику.
3) Базовый загрузчик попытается поискать в кеше класс Student.
_3.1) Если класс найден, загрузка окончена.
_3.2) Если класс не найден, базовый загрузчик попытается его загрузить.
__3.2.1) Если загрузка прошла успешно, она закончена ;)
__3.2.2) Иначе управление предается загрузчику раширений.
_3.3) Загрузчик расширений пытается загрузить класс.
__3.3.1) Если загрузка прошла успешно, она закончена ;)
__3.3.2) Иначе управление предается системному загрузчику.
_3.4) Системный загрузчик пытается загрузить класс.
__3.4.1) Если загрузка прошла успешно, она закончена ;)
__3.4.2) Иначе генерируется исключение java.lang.ClassNotFoundException.

я чото не пойму, от ext class-loader спускается вниз до System Classloader, даже если я в classpath пропишу путь до xmlsec.jar - все равно не находит...

Что-то я не понимаю...
...
Рейтинг: 0 / 0
External Classloader и glassfish/payara 4
    #39533366
EDUARD_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я правильно понял, что подход когда все зависимости кладутся в .war-ку - является корректным?
...
Рейтинг: 0 / 0
External Classloader и glassfish/payara 4
    #39533372
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD_2я правильно понял, что подход когда все зависимости кладутся в .war-ку - является корректным?
Нет. Есть ситуации когда зависимости стоит держать в JEE контейнере. Например, JDBC драйвера.
Но /jdk/lib/ext использовать не стоит, впрочем, как и Glassfish.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / External Classloader и glassfish/payara 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]