2013-05-28 4 views
0

Мы разрабатываем набор модулей, которые, можно надеяться, будут развернуты в Apache Karaf. Каждый модуль имеет многоуровневую структуру, начиная с объектов JPA домена/DAO, сервисов, веб-компонентов и т. Д., Где каждый из этих слоев превращается в другой пакет OSGi.Сделки с Hibernate в Apache Karaf/OSGi

Субъекты JPA распространяют некоторые абстрактные супертипы, которые принадлежат к общему расслоению. И здесь возникает проблема.

Поскольку OpenJPA «много рекламируется» при изучении способов Karaf и OSGi, мы сначала попробовали его. Ускорение компиляции было катастрофой и полной потерей времени из-за нашей иерархии сущностей, которая охватывает несколько пучков (банок): несколько ПУ и абстрактные супертипы. Даже если это сработало, я боюсь, что расширение OpenJPA требует от нас компиляции всех модулей с теми же версиями Java и OpenJPA, которые могут стать уродливыми в будущем, когда каждый модуль будет развиваться с другой скоростью.

Затем мы заглянули в Hibernate и работали, благодаря нескольким учебникам (не очень популярным). Однако, хотя все постоянные единицы являются транзакционными типами = «JTA», источник данных имеет тип JTA через JNDI, а методы DAO CRUD отмечены как в Blueprint, например, метод сохранения DAO, который должен содержать только что-то вроде

entityManager. сохраняются (счет)

работает только тогда, когда следуют

EntityManager. flush();

Я ожидал, что изменения должны быть промыты автоматически в конце сделки (т.е. в конце метода сохранения - текущий конец транзакции границей)

Если мы добавим вровень() только после того, как сохраняются, но затем отбросить исключение во время выполнения, нет отката для всего метода сохранения.

Там нет ошибки в журнале и проверить его на уровне отладки показывает

создал новый контекст сохранения [email protected]d для сделки [Xid: globalId = ffffffca2d6dfffff ...
...
Пропуск JTA регистрации синхронизации из-за автоматической проверки присоединиться
...
Выяснение EntityManager org.apache.aries.jpa.container.impl.EntityManagerWrapper @ 42e4823d по завершении транзакции.

так есть сделка, но она заканчивается без изменений подтолкнули в базу данных ..

Кстати, режим промывки установлен в положение AUTO.

Спасибо за любой отзыв, который у вас может быть.

+0

Вы можете разместить свой код или упрощенную версию где-то , С этой информацией немного сложно догадаться. Hibernate в настоящее время не очень удобен для OSGi. Таким образом, вы также можете попробовать Eclipselink. В настоящее время он поддерживается в ове. –

ответ

0

Поскольку команда Hibernate сделала некоторые улучшения для Hibernate для более плавного перехода на OSGi, вы можете использовать последнюю версию Hibernate, не уверен, что она уже выпущена.

+0

выпущен в Hibernate 4.2.3, см. [HHH-7527] (https://hibernate.atlassian.net/browse/HHH-7527) – sfussenegger

0

Я бы рекомендовал использовать EclipseLink для упрощения интеграции OSGI.

Я когда-то использовал JPA с OSGI. Я начал с OpenJPA, переключился на Hibernate после попадания в проблемы, и я решил использовать EclipseLink для решения других проблем.

Надеется, что это помогает

Смежные вопросы