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