powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
21 сообщений из 21, страница 1 из 1
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38628760
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я очень несведующ в этой теме. Знаю только, что мы можем загружать классы класслоадерами.

возникаеи вопрос куда? предположение - jvm

возможно ли такое - класлоадер1 грузит класс1, затем класслоадер 2 грузит класс1.
вопрос: что будет?

варианты:
1. Для jvm это 2 разных класса
2. один перетрёт другой
3. добавление нового проигнорится
4. ваш ответ.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38628770
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для JVM это два разных класса. Поэтому, чтобы избежать конфликтов, класслоадеры огранизуют в иерархию с делегированием поиска\загрузки родительским класслоадерам.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38628771
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что мешает спросить это у Гугла, и сразу же получить ответ?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38628773
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczДля JVM это два разных класса. Поэтому, чтобы избежать конфликтов, класслоадеры огранизуют в иерархию с делегированием поиска\загрузки родительским класслоадерам.

видимо в OSGI как-то не так эта иерархия работает
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38628786
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerвидимо в OSGI как-то не так эта иерархия работает
Да. Там есть свои сложности. Если в JEE поток принадлежит только одной ветке иерархии, то в OSGi иначе.
Как результат Class.getClassLoader() и Thread.getContextClassLoader() могут не совпадать. Что в некоторых случаях может выйти боком.
Плюс делегирование родительскому ClassLoader-у, оно не финальное. Его можно при желании переопределить. Что некоторые модульные системы и делают.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629050
bajork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большинство проблем с OSGi связанны с неправильным/неполным импортом пакетов.

Помню была проблема со spring-data мне нужно было получить метамодель чтобы сгенерить запрос но при доступе к ней через вполне себе стандартный способ javax.persistence.EntityManager.getMetamodel() я получал не помню какой экскепшин.
И нифига не помогало ни то, что я импортил все необходимые пакеты, как явно, так и с помощью Dynamic-ImportPackage... я все равно получал гребанное исключение.
В итоге я нашел причину в spring-data в каком-то там не помню абстрактном спринговом классе в разделе импорта не было какого-то там спрингового класса с которым работал его предок...

Такая хрень бывает обычно при работе с OSGi IDE среда сама пишет что типа класс не полный необходимо чего-то там импортировать...
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629073
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пишут, что так надо решать проблему:

Код: java
1.
2.
3.
4.
5.
6.
7.
ClassLoader tccl = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
try {
  // execute 3rd party code
} finally {
  Thread.currentThread().setContextClassLoader(tccl);
}



Но как-то костыльно имхо.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629083
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerпишут, что так надо решать проблему:
Но как-то костыльно имхо.
Столько лет прошло и до сих пор не решили этот костыль? Вроде мода на OSGi уже прошла. Теперь все смотрят с надеждой в сторону Jigsaw. Но оно похоже вообще в сильно зачаточном состоянии, если вообще не отменили ещё.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629135
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

BlazkowiczВроде мода на OSGi уже прошла

у нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится...
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629145
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerу нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится...
Чем нравится?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629154
bajork
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если правильно все импортируешь проблем с OSGi не будет в моем случае создатели spring-data закосячили хотя опять же это была не ошибка а предупреждение которое в OSGi стало ошибкой.

BlazkowiczСтолько лет прошло и до сих пор не решили этот костыль? Вроде мода на OSGi уже прошла. Теперь все смотрят с надеждой в сторону Jigsaw. Но оно похоже вообще в сильно зачаточном состоянии, если вообще не отменили ещё.

OSGi это же не тупа модули/плагины но и прежде всего сервисы. Пока что ничего подобного в JEE нет. Где можно и управлять и ограничивать видимость не условно как в том же DI spring где в принципе с любой точки входа в код можно получить доступ ко всему тому к чему не следует. + Динамическое управление поведением к примеру ижектить разные имплементации сервисов в зависимости от текущего состояния c помощью фильтра.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629159
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczquestionerу нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится...
Чем нравится?
Как я понимаю - красотой
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629166
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questionerКак я понимаю - красотой
Объективно, че.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629180
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
ну а как им ещё оценивать? красиво и дорого - значит классно.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629365
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

Blazkowicz Class.getClassLoader() и Thread.getContextClassLoader() могут не совпадать

очевидно, что первый вернет тот лоадер, который загрузил этот класс.

что вернет Thread.getContextClassLoader() ?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629444
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ну и сразу ещё спрошу. Может в силу опыта ответите.

Есть класс в OSGI бандле(плагине). Пусть этот бандл будет б1. в этом бадле описан модельный класс и проаннотированы его поля при помощи 3rd part библиотеки либ1.
Есть ещё второй бандл б2. в нем код, который натравливает 3rd part библиотеку на модельный класс. эта либ1 ищет аннотации над полями, но не видит ибо два одинаковых класса загруженных разными класслоадерами не равны в терминах jvm(как вы в начале и сказали).

Надеюсь я понятно объяснил проблему. Можете что-то посоветовать?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38629484
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,

Надо общие классы утащить в общий classloader, чтобы они стали одинаковыми.
https://www.google.com.ua/search?q=osgi share classes between bundles
Например, классы находятся только в одном из бандлов. А второй от него зависит и использует его классы как общие.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38630244
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

да, спасибо.


А можете мне разъяснить такую ситуацию.

Есть некоторая иерархия классов.

класс А, в нем композирован класс Б.
Код: java
1.
2.
3.
class A{
  private B = new B();
}



Есть два бандла. Соответственно два класслоадера.

сначала создаем в бандле1 созадем A. Соответственно в jvm загружается A.class(cl1) B.class(cl1)

потом в бандле 2 создаем A. как я понимаю если бы у нас на бандл был один загрузчик, то загрузились и A.class(cl2) B.class(cl2).

Но этого же не происходит. почему?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38630255
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
questioner,
Я не понял вопроса.
Но вот гугл сходу выдаёт несколько вводных статей.
https://www.google.com/search?q=OSGi classloading
Как минимум первые три выглядят интересно.

Загрузчики имеют механизм делегирования. Прежде чем загрузить поискать и загрузить класс у себя, загрузчик имеет возможность спросить у других класслоадеров, и использовать их класс, если он уже был загружен.
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38630324
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где находится либ1 - в б1,в б2, и в б1 и в б2, в отдельном bundle?
...
Рейтинг: 0 / 0
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
    #38630459
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FD,

да, трабла была в том, что либа была подключена везде где попало и правильно решение утащить ее в отдельный бандл.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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