|
|
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Я хочу собрать классы Entity с аннотациями из плагинов в кучу, имея сторонний Java plugin Framework. А этот JPF видимо использует разные загрузчики классов для каждого плагина, и Hibernate не может прочитать аннотации из классов. Вот суть примера (без фреймворка): Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Ошибка такая: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2012, 01:10:44 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Переформулирую вопрос. Возможно ли, используя Hibernate/JPA, организовать поиск аннотированных классов и их маппинг, указав путь к jar файлам, содержащим такие классы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:10:13 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Посмотрите документнацию к классу Configuration. Через него можно все маппинги заполнить не прибегая к сканированию классов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:16:09 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, можно, наверное используя XML. Но это мне не подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:28:48 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
javapeckerBlazkowicz, можно, наверное используя XML. Но это мне не подходит. Не пробовали до конца доку дочитать. Например Configuration.addAnnotatedClass() ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:31:40 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, пробовал. Но это в первом посте темы вообще-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:33:32 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
javapeckerBlazkowicz, пробовал. Но это в первом посте темы вообще-то Sorry, меня сбило что там AnnotationConfiguration, который уже deprecated. Проблема в том что в Java класс идентифицируется не только именем, а ещё и загрузчиком. Тот класс, который вы загрузили и добавили в Configuration, это не тот же самый класс, который вы потом пытаетесь использовать. Поэтому он его и не находит. Вам нужно делать тоже самое, но вместо того чтобы самому грузить классы, отыскивать их правильным образом в вашей инфруструктуре. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:37:00 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, вот про отыскивание в инфраструктуре и речь. У меня есть набор jar файлов - плагинов, в каждом из этих файлов есть аннотированные классы. Приложение, которое работает с плагинами, должно просканировать jar-ы (это идеальный вариант), либо запросить у плагинов список классов, и создать на основе этого сессию. Вариант с запрашиванием валится, потому что авторТот класс, который вы загрузили и добавили в Configuration, это не тот же самый класс, который вы потом пытаетесь использовать. Поэтому он его и не находит. То есть остается два варианта. 1. Расширить системный загрузчик на jar-ы плагинов, чтобы хибернейт и мои классы оказались в одном пространстве - а это для меня означает отказаться от использования фреймворка, который я пытался использовать вначале, и заменить его другим, или самому написать. 2. Может быть все-таки есть механизм, который именно сканирует указанные jar-ы? Невзирая на то плагины это или что-то другое. Согласитесь, вещь полезная, и если в реализациях JPA такого нет, то это стоило бы придумать. Ведь можно даже без всяких плагинов в рамках одного приложения напаковать сущностей в архивы просто для удобства и отделения их от всего остального в приложении. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:51:33 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
javapecker2. Может быть все-таки есть механизм, который именно сканирует указанные jar-ы? Невзирая на то плагины это или что-то другое. Согласитесь, вещь полезная, и если в реализациях JPA такого нет, то это стоило бы придумать. Ведь можно даже без всяких плагинов в рамках одного приложения напаковать сущностей в архивы просто для удобства и отделения их от всего остального в приложении. Вы, кажется, не до конца поняли почему ваш вариант не работает. Хибер привязываем маппинг непосредственно к классу. Тут никакое сканирование не вылечит, т.е. нужно знать ещё ClassLoader, которым в вашей системе будет загружен конкретный класс. А у каждого плагина он свой. Нужно рассмотреть вариант перехватата инициализации каждого плагина. В этот момент его классы уже будут доступны в нужнов виде. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:54:51 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Посмотрите, в Plugin через PluginDescriptor можно найти путь к классам. Этот путь и можно просканировать. Важно только это правильно делать при старте и остановке плагина. Чтобы добавлять-удалять маппинги на классы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 11:59:05 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, очередной раз спасибо за помощь. Попробую тест набросать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 12:02:15 |
|
||
|
Hibernate: разные ClassLoader-ы для Entity, как заставить работать?
|
|||
|---|---|---|---|
|
#18+
Так, вариант, назовем его "расширение Classpath на плагины" работает отлично. Но, хотелось бы разобраться теперь до конца со сканированием. В Persistence.xml для Hibernate-провайдера JPA есть такое: Код: xml 1. и есть такое: Код: xml 1. Причем Hibernate обеспечивает работу этого механизма в SE, необязательно в EE. То есть хибернейт способен найти указанный джар, посмотреть какие там есть классы, у каждого из них взять метаданные и создать маппинг. И в интернете много ссылок довольных людей, у которых это работает. У меня, к сожалению, не работает. Простой пример: Имеем проект, в котором определен persistence.xml, сконфигурированный для использования с Hibernate 4, также используется автосоздание схемы: Код: xml 1. В проекте определена одна своя сущность. И есть тестовый джар, в котором лежит еще одна сущность. При запуске основного проекта генерится схема, в которой присутствует родная сущность, но нет сущности из тестового джара. При этом хибернейт совершенно точно находит тестовый джар (если убрать из указанного места - ругается). Определенно, что-то я сделал неправильно. Что именно? Может, к джарам есть специальные требования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2012, 17:11:50 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=276&tid=2131244]: |
0ms |
get settings: |
15ms |
get forum list: |
23ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
37ms |
get topic data: |
15ms |
get forum data: |
4ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 288ms |
| total: | 443ms |

| 0 / 0 |
