Я использую karaf 3.0.3 и следующее Hibernate расслоение:Почему Откат не работает с Hibernate/OSGi/karaf/JPA/MySQL
161 | Активный | 80 | 4.2.12. Финал | hibernate-core
162 | Активный | 80 | 4.2.12. Финал | hibernate-entitymanager
172 | Активный | 80 | 4.2.12. Финал | hibernate-osgi
С этой настройкой я не могу заставить транзакцию отката работать, хотя я могу развернуть те же компоненты (JPA DAO, сервисный уровень и т. д.) в качестве автономного приложения Spring, и я вижу, спины выполнены правильно.
Каковы ошибки при попытке добиться успешной работы транзакций с OSGI/спящим режимом?
- Это как-то связано с перекрестными связями? (Мои объекты DAO и уровень услуг в отдельных пучках)
Если я не отвечаю здесь, я буду обновлять с более конкретной информацией, но сначала я хочу, чтобы увидеть, если это общая проблема с OSGi/спящем/JPA ,
редактировать после комментария user2007829 в: Объекты DAO простираться весны JpaRepository
и метод обслуживания слой помечается весны @Transactional
. Я верю в эту настройку, автоматическая фиксация должна быть неявно отключена, а автономная настройка приложения Spring работает так, как ожидалось. Это неправильно?
Каким образом XML-файл единицы сохранения сохраняется в случае OSGI? Сейчас единственное различие заключается в том, что сделка типа является JTA в случае karaf, и у меня есть заявление, как это:
<jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/my-datasource)</jta-data-source>
Спасибо, ваш комментарий и учебник были очень полезны. Я создал источник данных в соответствии с вашим учебным пособием и оставил остальную часть моего приложения нетронутым, и я смог доказать, что откат транзакций работает. Я подозреваю, что «XA» является ключевым здесь, как вы подозревали. Можете ли вы прокомментировать, почему мне нужны транзакции XA, хотя у меня есть только один источник данных и приложение работает в одной JVM? Это потому, что моя транзакция охватывает несколько пакетов? –
Я не уверен, как весна работает внутри страны. Обычно в jpa вы можете использовать типы транзакций RESOURCE_LOCAL или JTA. При запуске в контейнере рекомендуется использовать JTA, для которого требуется XADataSource. Поэтому, вероятно, вы установите весну для запуска в режиме JTA. Btw. JTA всегда является хорошей идеей в контейнере, и у нее нет реальных недостатков в производительности. –