Eclipse RCP, Spring, проблема загрузки классов Hibernate - PullRequest
3 голосов
/ 07 марта 2012

Я занимаюсь разработкой приложения на основе RCP, в котором используется слой доступа к данным, реализованный с использованием Spring Data JPA и Hibernate. Аннотированные доменные классы находятся в одном jar / bundle, репозитории Spring и Spring config для создания экземпляра источника данных, менеджера сущностей и менеджера транзакций в другом комплекте. Эти jar-файлы используются другими приложениями не-RCP по всему проекту. У меня есть все из jiber и зависимостей hibernate 3.6.8, либо упакованных и выставленных через мои собственные плагины, либо как пакеты OSGI (jta, antlr, коллекции commons и т. д.) на целевой платформе. Я использую Eclipse Gemini Blueprint для управления контекстами пружин связки в приложении RCP.

Когда контекст пружины комплекта DAL инициализируется расширителем gemini, я получаю связанные с Hibernate исключения ClassDefNotFound, обычно либо в org.hibernate.ejb.HibernatePersistence, либо в javax.persistence.spi.Persistenceprovider. Я попытался поместить все jiber и hibernate в один плагин, который экспортирует пакеты javax и hibernate. Я попытался настроить политики Eclipse Buddy в виде подключаемых модулей и т.д.

Мне не удалось найти какое-либо решение этой проблемы загрузки классов между Spring и Hibernate в Eclipse RCP с использованием Gemini. Я выполнил прошлые проекты DAO в спящем режиме в RCP, поместив все файлы спящего режима в один и тот же плагин, что и мой домен и классы DAO, поэтому экспортируются только мои классы.

На данный момент я не думаю, что переход к более дружественному OSGI провайдеру JPA, такому как OpenJPA или EclipseLink, является вариантом.

Я нашел ответ на слегка связанный вопрос, в котором предлагалось поместить все пружинные фляги и зависимости в один плагин, с банками спящего режима и зависимостями в другом плагине с установленной политикой друзей. Это кажется грязным, когда большинство задействованных jar-пакетов являются OSGi-пакетами.

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

Есть ли чистый способ заставить это работать?

1 Ответ

0 голосов
/ 29 марта 2012

Базовый пакет, если вы им владеете, добавьте все подозрительные пакеты в качестве зарегистрированных друзей и убедитесь, что вы определили определенные вами пакеты или пакеты, в противном случае иногда загрузка классов друзей не будет работать.Если загрузка инициируется из вашего пакета, политика друзей в Eclipse должна каскадироваться.Другой вариант - изменить самые загруженные файлы в целевых пакетах, которые вызывают проблемы.

...