Я занимаюсь разработкой приложения на основе 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, чтобы они все могли видеть друг друга.
Есть ли чистый способ заставить это работать?