2012-03-07 2 views
3

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

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

ответ

0

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

+0

Спасибо Дункан. Я применил аналогичный подход к тому, что вы описали, чтобы получить решение JPA DAO, работающее с Hibernate, но без Spring Data JPA, объединив банки Hibernate и зависимости в одном плагине и используя приятельскую загрузку с моим модулем модели домена и плагином DAO. Я не хотел изменять какие-либо сторонние манифесты, поскольку это не очень хороший вариант обслуживания. Поэтому в нижней строке я отказался от использования Spring Data JPA в среде Eclipse RCP из-за проблем с загрузкой классов. – KWilson