2015-04-08 2 views
0

Я использую 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> 

ответ

1

Существует много возможных причин, по которым это может произойти. Например, ваш источник данных может не правильно загрузить XADataSource. В этом случае может произойти, что EntityManager не присоединился к транзакции или не был зачислен как источник XA.

Посмотрите на эти учебники. Легче начать с рабочей базы: http://www.liquid-reality.de/x/LYBk http://www.liquid-reality.de/x/C4DK

К сожалению, учебные пособия основаны на план и Овен JPA, так что это не совсем весна. Вы все равно должны иметь возможность использовать некоторые данные. Кроме того, я могу только рекомендовать переключиться с весны на чертеж, поскольку весна больше не поддерживает OSGi.

Для плана есть апасы, которые учебные пособия основаны на или затмевают Близнецы.

+0

Спасибо, ваш комментарий и учебник были очень полезны. Я создал источник данных в соответствии с вашим учебным пособием и оставил остальную часть моего приложения нетронутым, и я смог доказать, что откат транзакций работает. Я подозреваю, что «XA» является ключевым здесь, как вы подозревали. Можете ли вы прокомментировать, почему мне нужны транзакции XA, хотя у меня есть только один источник данных и приложение работает в одной JVM? Это потому, что моя транзакция охватывает несколько пакетов? –

+1

Я не уверен, как весна работает внутри страны. Обычно в jpa вы можете использовать типы транзакций RESOURCE_LOCAL или JTA. При запуске в контейнере рекомендуется использовать JTA, для которого требуется XADataSource. Поэтому, вероятно, вы установите весну для запуска в режиме JTA. Btw. JTA всегда является хорошей идеей в контейнере, и у нее нет реальных недостатков в производительности. –

0

А как вы используете спящий режим? Вы создаете транзакцию и работаете внутри нее или связаны ваши сеансы запросов? Кроме того, вы установили autocommit в false?

+0

DAO расширяют JpaRepository Spring, а метод уровня обслуживания аннотируется с помощью @Transactional от Spring. Я верю в эту настройку, автоматическая фиксация должна быть неявно отключена, а автономная настройка приложения Spring работает так, как ожидалось. Это неправильно? Как XML-файл единицы измерения продолжительности отличается в случае OSGI?В настоящее время единственная разница заключается в том, что тип транзакции является JTA в случае с karaf, и у меня есть такое объявление: osgi: service/javax.sql.DataSource/(osgi.jndi.service .name = jdbc/payliquid-datasource)

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