Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужна иерархичность загузчиков классов? / 25 сообщений из 43, страница 1 из 2
12.01.2017, 19:10
    #39383522
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
В java классы загружают в память класслоадеры.
Этих класслоадеров по умолчанию 3. Можно добавлять и свои.

Я не очень понял а зачем это всё нужно то?

почему не сделать просто один лоадер, который всё грузит, все классы всегда видны, никаких проблем, солнышко светит, небо голубое.
...
Рейтинг: 0 / 0
12.01.2017, 19:19
    #39383532
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questioner,

Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно.
...
Рейтинг: 0 / 0
12.01.2017, 19:22
    #39383534
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
Хотя даже для десктопа - bootstrap загрузчик особенный. Там доступны всяческие оптимизации, такие как CDS
...
Рейтинг: 0 / 0
12.01.2017, 19:33
    #39383547
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
Blazkowiczquestioner,

Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно.

изоляция понятно - на одном сервере надо запускать много приложений, которые используют разные версии библиотек.


а Безопасноcть и приоритеты ?
...
Рейтинг: 0 / 0
12.01.2017, 19:47
    #39383559
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerBlazkowiczquestioner,

Это нужно для изоляции, приоритета и безопасности. Да, на десктопном приложении это не так очевидно. Но вот для апплетов и JEE - очень важно.

изоляция понятно - на одном сервере надо запускать много приложений, которые используют разные версии библиотек.


а Безопасноcть и приоритеты ?


Кажется с безопасностью частично понятно.

делаем класс в пакете java.lang и можем иметь доступ как минимум к package visible членам класса.
Что видимо не предполагалось создателями джавы

но почему тогда сделать не 2, а 3 именно? для расширений отдельный лоадер зачем?

ну и приоритеты
...
Рейтинг: 0 / 0
12.01.2017, 19:59
    #39383562
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerдля расширений отдельный лоадер зачем?
А как тогда? Это же барахолка, а не обязательные классы.

questionerну и приоритеты
Класслоадеры по-умолчанию делегируют загрузку родителям.
...
Рейтинг: 0 / 0
13.01.2017, 00:13
    #39383658
vimba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
BlazkowiczКласслоадеры по-умолчанию делегируют загрузку родителям.

Нет, это очень сильно зависит от целей, которые пытается достичь создатель класслоадера, тут вообще не применимо никакое умолчание, как напишешь так и будет. Есть лишь общие рекомендации еще со времён SUN писать класслоадеры в описанной Вами манере, но цели натаптывания собственного класслоадера могут и расходится с рекомендациями как например в spring-jar-helsing или OSGI. Да даже в банальных JEE/WAR большинсво в адекватных сервлет-контейнерах в имплементациях загрузчика классов для веб приложения сначала пытаются резолвить классы из WEB-IN/classes, WEB-INF/lib и только в случае неудачи делигировать загрузку класслоадеру сервлет контейнера, чтобы случайно не подраться с сервером в случае когда серверу и приложению нужны разные версии одной и той же библиотеки.
...
Рейтинг: 0 / 0
13.01.2017, 06:32
    #39383700
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
vimba,

Термин "по-умолчанию" вам не знаком? Объяснить что он обозначает?
...
Рейтинг: 0 / 0
13.01.2017, 09:32
    #39383780
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
BlazkowiczКласслоадеры по-умолчанию делегируют загрузку родителям.

А почему именно такая концепция?

это side effect решения проблемы изоляции и безопасности?
...
Рейтинг: 0 / 0
13.01.2017, 09:35
    #39383782
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questioner А почему именно такая концепция?

Ну, приоритет загрузки же. Мы же хотим Java классы грузить из bootstrap загрузчика, а не загрузчика приложения.
...
Рейтинг: 0 / 0
13.01.2017, 09:49
    #39383795
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
vimbaНет, это очень сильно зависит от целей, которые пытается достичь создатель класслоадера, тут вообще не применимо никакое умолчание, как напишешь так и будет.

Бред сивой кобылы. Есть базовая реализация java.lang.ClassLoader - в которой это поведение уже реализовано. Чтобы его переопределить нужно приложит дополнительные усилия.

vimbaЕсть лишь общие рекомендации еще со времён SUN писать класслоадеры в описанной Вами манере

Что наводит нас на мысль что исходый код java.lang.ClassLoader вы отродясь не видели.

vimba, но цели натаптывания собственного класслоадера могут и расходится с рекомендациями как например в spring-jar-helsing

Какая-то поделка на гитхабе, это, конечно, весомый аргумент.

vimbaили OSGI.

А в OSGi (а не OSGI, как некоторым могло показаться) вообще всё через >|<опу. Особенно весело когда там из-за этой фишки перестаёт работать половина библиотек, использующих, Class.forName().

vimbaДа даже в банальных JEE/WAR большинсво в адекватных сервлет-контейнерах в имплементациях загрузчика классов для веб приложения сначала пытаются резолвить классы из WEB-IN/classes, WEB-INF/lib и только в случае неудачи делигировать загрузку класслоадеру сервлет контейнера, чтобы случайно не подраться с сервером в случае когда серверу и приложению нужны разные версии одной и той же библиотеки.
Мне можно не рассказывать. Я ещё в JBoss 3.x с вопросом разобрался досконально, когда мне пришлось там дружить десяток проектов написанных разными командами. Так вот, в те годы, как вы выражаетесь "адекватных сервлет-контейнеров" не было в принципе. На этот косяк наступили вообще все. Это раз.
JBoss даже добавили флаг, который отключал делегирование родителям, но лучше от этого не становилось, это два.
Ну, и три, что контейнеру всего лишь нужно было держать свои классы в отдельной ветке иерархии, а не в общей для всех модулей. Делегирование поиска родителям никуда не делось.
...
Рейтинг: 0 / 0
13.01.2017, 17:49
    #39384426
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
буквально сегодня спросили зачем фреимворки используют разные класслоадеры. Вот например spring.

Судя по написанному выше - для изоляции. а что от чего изолировать нужно?
...
Рейтинг: 0 / 0
13.01.2017, 18:36
    #39384462
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerбуквально сегодня спросили зачем фреимворки используют разные класслоадеры
Это вопрос с подвохом. Фреймверки не используют разные класслоадеры. Контейнеры используют. JEE контейнеры, OSGi контейнеры, самописные контейнеры плагинов. "фреймверки" - это вообще про другое. Почитайте определение и проихождение этого термина.

questionerВот например spring
Spring Framework не использует класслоадеры. Разве что их реализация OSGi.
Только в данном случае Spring Framework это не "какой-то фреймверк", а нарицательное имя для семейства проектов.

questionerСудя по написанному выше - для изоляции. а что от чего изолировать нужно?
Модули нужно изолировать друг от друга, потому что модули могут использовать разные версии одинаковых библиотек.
...
Рейтинг: 0 / 0
16.01.2017, 11:52
    #39385301
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
[quot Blazkowicz]questionerбуквально сегодня спросили зачем фреимворки используют разные класслоадеры
Это вопрос с подвохом. Фреймверки не используют разные класслоадеры. Контейнеры используют. JEE контейнеры, OSGi контейнеры, самописные контейнеры плагинов. "фреймверки" - это вообще про другое. Почитайте определение и проихождение этого термина.

Вопрос звучал так:

Берешь ты context.getBean("myBean") и пытаешься скачтить к MyClass. вываливается ClassCastException. При это берешь у этого myBean .getClass и видно, что он возвращает MyClass.
...
Рейтинг: 0 / 0
16.01.2017, 12:20
    #39385325
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerВопрос звучал так:
Одно и то же, да. Как буд-то без getBean() не обойтись.
Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи.
Жаль что только про ClassCastException спросили. Там их ещё несколько более экзотических есть, по точно такой же причине.
...
Рейтинг: 0 / 0
16.01.2017, 12:58
    #39385363
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
BlazkowiczquestionerВопрос звучал так:
Одно и то же, да. Как буд-то без getBean() не обойтись.
Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи.
Жаль что только про ClassCastException спросили. Там их ещё несколько более экзотических есть, по точно такой же причине.

Ну единственное, что я смог сказать. что классы по всеё видимости разными класслоадерами загружены, если мы видимо такое поведение.

Проясните, пожалуйста.
...
Рейтинг: 0 / 0
16.01.2017, 13:00
    #39385366
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerПроясните, пожалуйста.
Прояснить что?
...
Рейтинг: 0 / 0
16.01.2017, 13:43
    #39385409
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
BlazkowiczПрояснить что?

BlazkowiczНу, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи.
...
Рейтинг: 0 / 0
16.01.2017, 14:17
    #39385438
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questioner,

Так на много понятнее.
...
Рейтинг: 0 / 0
16.01.2017, 16:11
    #39385559
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
Blazkowicz Ну, и причина ClassCastException и "зачем фреимворки используют разные класслоадеры", совсем чуточку разные вещи.

Какие это конкретно причины?
Почему для загрузки бина из контекста может использоваться другой класслоадер в spring?
...
Рейтинг: 0 / 0
16.01.2017, 16:23
    #39385570
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerКакие это конкретно причины?

Вопрос. Причина ClassCast.
Ответ. Разные класслоадеры.
Где тут про фреймверки?

questionerПочему для загрузки бина из контекста может использоваться другой класслоадер в spring?
getBean() это не "загрузка бина из контекста", а получение ссылки на него. А как он туда попал это уже дело десятое.
...
Рейтинг: 0 / 0
16.01.2017, 16:27
    #39385573
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerПочему для загрузки бина из контекста может использоваться другой класслоадер в spring?
getBean() это не "загрузка бина из контекста", а получение ссылки на него. А как он туда попал это уже дело десятое.[/quot]

А как он мог туда попасть загруженный другим класслоадером?
...
Рейтинг: 0 / 0
16.01.2017, 16:35
    #39385583
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerА как он мог туда попасть загруженный другим класслоадером?
Ну, например, из другого JEE модуля. Например у вас два модуля обмениваются данными. И вот вы нашли что этот обмен, достаточно узкое место. Как его ускорить?
Поместить модули на один сервер. А можно быстрее? Конечно! Убрать сериализацию и заменить прямыми вызовами.
Ну, либо ранее упомянутый OSGi.
...
Рейтинг: 0 / 0
16.01.2017, 16:56
    #39385599
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
Blazkowicz,

Я наверное не очень понимаю, что такое модуль. С JBOSS-ами работать не приходилось. Только деплоил варники в Tomcat/Jetty. Бывало, что для реализации продукта нужно было больше одного варники, но по сути это были разные приложения, общающиеся через rest или просто сидящие на одной базе
...
Рейтинг: 0 / 0
16.01.2017, 17:08
    #39385615
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужна иерархичность загузчиков классов?
questionerобщающиеся через rest или просто сидящие на одной базе
Ну, это как два разрабочика, которые сидят за соседними столами, но общаются исключительно по email.
Если они пересекаются раз в месяц - это нормально. А если плотно работают над общей задачей и общим кодом, то наверное такое общение может стать и узким местом.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужна иерархичность загузчиков классов? / 25 сообщений из 43, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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