|
|
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Я очень несведующ в этой теме. Знаю только, что мы можем загружать классы класслоадерами. возникаеи вопрос куда? предположение - jvm возможно ли такое - класлоадер1 грузит класс1, затем класслоадер 2 грузит класс1. вопрос: что будет? варианты: 1. Для jvm это 2 разных класса 2. один перетрёт другой 3. добавление нового проигнорится 4. ваш ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:12 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Для JVM это два разных класса. Поэтому, чтобы избежать конфликтов, класслоадеры огранизуют в иерархию с делегированием поиска\загрузки родительским класслоадерам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:16 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Что мешает спросить это у Гугла, и сразу же получить ответ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:16 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczДля JVM это два разных класса. Поэтому, чтобы избежать конфликтов, класслоадеры огранизуют в иерархию с делегированием поиска\загрузки родительским класслоадерам. видимо в OSGI как-то не так эта иерархия работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:19 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questionerвидимо в OSGI как-то не так эта иерархия работает Да. Там есть свои сложности. Если в JEE поток принадлежит только одной ветке иерархии, то в OSGi иначе. Как результат Class.getClassLoader() и Thread.getContextClassLoader() могут не совпадать. Что в некоторых случаях может выйти боком. Плюс делегирование родительскому ClassLoader-у, оно не финальное. Его можно при желании переопределить. Что некоторые модульные системы и делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 13:28 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Большинство проблем с OSGi связанны с неправильным/неполным импортом пакетов. Помню была проблема со spring-data мне нужно было получить метамодель чтобы сгенерить запрос но при доступе к ней через вполне себе стандартный способ javax.persistence.EntityManager.getMetamodel() я получал не помню какой экскепшин. И нифига не помогало ни то, что я импортил все необходимые пакеты, как явно, так и с помощью Dynamic-ImportPackage... я все равно получал гребанное исключение. В итоге я нашел причину в spring-data в каком-то там не помню абстрактном спринговом классе в разделе импорта не было какого-то там спрингового класса с которым работал его предок... Такая хрень бывает обычно при работе с OSGi IDE среда сама пишет что типа класс не полный необходимо чего-то там импортировать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:38 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
пишут, что так надо решать проблему: Код: java 1. 2. 3. 4. 5. 6. 7. Но как-то костыльно имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:54 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questionerпишут, что так надо решать проблему: Но как-то костыльно имхо. Столько лет прошло и до сих пор не решили этот костыль? Вроде мода на OSGi уже прошла. Теперь все смотрят с надеждой в сторону Jigsaw. Но оно похоже вообще в сильно зачаточном состоянии, если вообще не отменили ещё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 15:59 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, BlazkowiczВроде мода на OSGi уже прошла у нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:20 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questionerу нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится... Чем нравится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:26 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Если правильно все импортируешь проблем с OSGi не будет в моем случае создатели spring-data закосячили хотя опять же это была не ошибка а предупреждение которое в OSGi стало ошибкой. BlazkowiczСтолько лет прошло и до сих пор не решили этот костыль? Вроде мода на OSGi уже прошла. Теперь все смотрят с надеждой в сторону Jigsaw. Но оно похоже вообще в сильно зачаточном состоянии, если вообще не отменили ещё. OSGi это же не тупа модули/плагины но и прежде всего сервисы. Пока что ничего подобного в JEE нет. Где можно и управлять и ограничивать видимость не условно как в том же DI spring где в принципе с любой точки входа в код можно получить доступ ко всему тому к чему не следует. + Динамическое управление поведением к примеру ижектить разные имплементации сервисов в зависимости от текущего состояния c помощью фильтра. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:30 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerу нас OSGI - кусок большой и "модной" платформы. Заказчикам нравится... Чем нравится? Как я понимаю - красотой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:32 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questionerКак я понимаю - красотой Объективно, че. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:33 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ну а как им ещё оценивать? красиво и дорого - значит классно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 16:39 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Blazkowicz Class.getClassLoader() и Thread.getContextClassLoader() могут не совпадать очевидно, что первый вернет тот лоадер, который загрузил этот класс. что вернет Thread.getContextClassLoader() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 19:23 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ну и сразу ещё спрошу. Может в силу опыта ответите. Есть класс в OSGI бандле(плагине). Пусть этот бандл будет б1. в этом бадле описан модельный класс и проаннотированы его поля при помощи 3rd part библиотеки либ1. Есть ещё второй бандл б2. в нем код, который натравливает 3rd part библиотеку на модельный класс. эта либ1 ищет аннотации над полями, но не видит ибо два одинаковых класса загруженных разными класслоадерами не равны в терминах jvm(как вы в начале и сказали). Надеюсь я понятно объяснил проблему. Можете что-то посоветовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 20:59 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questioner, Надо общие классы утащить в общий classloader, чтобы они стали одинаковыми. https://www.google.com.ua/search?q=osgi share classes between bundles Например, классы находятся только в одном из бандлов. А второй от него зависит и использует его классы как общие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.04.2014, 22:00 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, да, спасибо. А можете мне разъяснить такую ситуацию. Есть некоторая иерархия классов. класс А, в нем композирован класс Б. Код: java 1. 2. 3. Есть два бандла. Соответственно два класслоадера. сначала создаем в бандле1 созадем A. Соответственно в jvm загружается A.class(cl1) B.class(cl1) потом в бандле 2 создаем A. как я понимаю если бы у нас на бандл был один загрузчик, то загрузились и A.class(cl2) B.class(cl2). Но этого же не происходит. почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 15:05 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
questioner, Я не понял вопроса. Но вот гугл сходу выдаёт несколько вводных статей. https://www.google.com/search?q=OSGi classloading Как минимум первые три выглядят интересно. Загрузчики имеют механизм делегирования. Прежде чем загрузить поискать и загрузить класс у себя, загрузчик имеет возможность спросить у других класслоадеров, и использовать их класс, если он уже был загружен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 15:14 |
|
||
|
Возможно ли загрузить один и тот же класс двумя разными класслоадерами?
|
|||
|---|---|---|---|
|
#18+
А где находится либ1 - в б1,в б2, и в б1 и в б2, в отдельном bundle? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.04.2014, 15:50 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38628773&tid=2127251]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 407ms |

| 0 / 0 |
