Я разрабатываю приложение на основе RCP, которое использует уровень доступа к данным, реализованный с использованием Spring Data JPA, поддерживаемого спящим режимом. Аннотированные классы домена находятся в одном jar/bundle, хранилища Spring и Spring config для создания экземпляра источника данных, менеджера сущностей и менеджера транзакций находятся в другом комплекте. Эти банки используются другими приложениями, отличными от RCP, через проект. У меня есть все из спящего режима 3.6.8 банок и зависимостей, которые либо завернуты, либо выставлены через мои собственные плагины или в виде пакетов OSGI (jta, antlr, коллекций коллекций и т. д.) на целевой платформе. Я использую Eclipse Gemini Blueprint для управления контекстом весов пакета в приложении RCP.Eclipse RCP, Spring, Hibernate Class Loading Issue
Когда контекст пружины пакета DAL инициализируется расширителем gemini, я получаю исключения класса ClassDefNotFound, относящиеся к гибернату, как правило, либо на org.hibernate.ejb.HibernatePersistence, либо javax.persistence.spi.Persistenceprovider. Я попытался поместить все спящие банки и зависимости в один плагин, который экспортирует пакеты javax и hibernate. Я попытался установить политики Eclipse Buddy в манифесте плагинов, которые у меня есть, и т. Д.
Я не смог найти решение проблемы с загрузкой этого класса между Spring и Hibernate под Eclipse RCP, используя Gemini , Я сделал прошлые habernate проекты DAO в RCP, поместив все спящие баночки в тот же плагин, что и мой домен и классы DAO, поэтому экспортируются только мои классы.
На данный момент я не думаю, что переход на более удобный для OSGI провайдер JPA, такой как OpenJPA или EclipseLink, является вариантом.
Я нашел ответ на слегка смежный вопрос, который предложил поместить все весенние банки и зависимости в один плагин с помощью спящих банок и зависимостей в другом плагине с установленными политиками приятелей. Это кажется грязным, когда большинство задействованных банок являются пакетами OSGi.
Я полагаю, что я мог бы создать плагин, в котором хранятся банки DAL, спящие банки и пружинные банки ORM, чтобы они могли видеть друг друга.
Есть ли чистый способ заставить это работать?
Спасибо Дункан. Я применил аналогичный подход к тому, что вы описали, чтобы получить решение JPA DAO, работающее с Hibernate, но без Spring Data JPA, объединив банки Hibernate и зависимости в одном плагине и используя приятельскую загрузку с моим модулем модели домена и плагином DAO. Я не хотел изменять какие-либо сторонние манифесты, поскольку это не очень хороший вариант обслуживания. Поэтому в нижней строке я отказался от использования Spring Data JPA в среде Eclipse RCP из-за проблем с загрузкой классов. – KWilson