![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
4epT |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Всем привет. Читаю насчет транзакций в спринге, понял что есть два типа: локальные (в пределах одного транзакционного ресурса) и глобальные (несколько транзакционных ресурсов). В моем случае нужно использовать глобальные транзакции.
У меня в пределах одной транзакции идет работа с mongodb, redis и rabbitmq. Объявляю бины:
Добавил tx:annotation-driven:
Приложение стартует нормально. Специально тушу rabbit (то есть упадет эксепшен Connection refused). Изменения не откатываются. Метод помечен как:
|
||||||
|
|||||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет.
А этот Exception Runtime? Только Runtime приводят к автоматическому ролл-бэк транзакции И как-то ты все сложновато настроил. Может этого будет достаточно:
Где первый создас бин типа JtaTransactionManager с имененм "transactionManager" А второй сдеай, то что ты уже знаешь: разрешит использовать @Transactional Но все это будет работать, если ты подымаешь свое приложение под сервером прложений: JBOSS, WAS, WebLogic. Или давай не так: что это за классы: UserTransactionManager, UserTransactionImp? -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Эксепшен не Runtime ) может быть в этом и проблема.
У меня весь конфиг спринга вынесен из xml (xml не использую вообще), можно эти (<tx:jta-transaction-manager/> <tx:annotation-driven/>) настройки прописать аннотациями ? или вынести в xml и сделать @ImportResource ? Используется jetty.
Это из atomikos. |
|||
|
||||
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
и
Тогда все нормально: пусть будет в аннотациях. Так что там у тебя с Runtime? Не в тему: а как используешь Srping Integration без XML ![]() -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Выкинул Runtime эксепшен, картина не изменилась, данные из базы не подчистились.
Ну для mongodb использую SpringData, то есть mongoTemplate и SimpleMongoDbFactory. Для redis использую jedis и его конфигурацию через Spring. Или это не Spring integration ? |
|||
|
||||
MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Ты же всем своим ресурсам должен указать один и тот же transactionManager... Не достаточно просто @Transactional. Все эти ресурсы должны знать в рамках, какого transactionManager жевет ихняя транзакция. Иначе они сами за тебя это решат в рамках своих локльных транзакционных вохможностей.
Нет. Я тебе в предыдущей теме давал ссылку -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
4epT |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Ну для локальных транзакций там прописывается dataSource к которому "принадлежит" этот transactionManager, а для глобальных я читал что просто объявляется JtaTransactionManager и все ... Как тогда прописать моим ресурсам transactionManager ? если я правильно понял, то ресурсы это mongodb, redis и rabbimq ? Ну и к слову я сейчас вообще сильно сомневаюсь в надобности использования JTA, так как говорят что производительность из за этого очень сильно скачет, легче уже тогда енаписать свой rollback...
Да, то я не правильно посмотрел в первый раз ... теперь понял что имеется ввиду. В начале смотрел на это, но потом как то забыл, нужно будет еще раз глянуть ) Это сообщение отредактировал(а) 4epT - 26.12.2012, 19:00 |
||||
|
|||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Где у тебя проблема с ролл-бэком?
Основная парадигма, что все NoSQL не поддерживают транзакции ![]() Но по Mongo вот, что я нашел: http://docs.mongodb.org/manual/tutorial/pe...-phase-commits/ -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Проблема в том что ролбек не работает ) и это наверное из за:
так что наверное напишу свою реализацию ролбек и все. И кстати, ведь при объявлении бина JtaTransactionManager, ему не нужно прописывать ресурсы с какими он работает, почему тогда:
Допустим я использую SQL решения, мне нужно будет моим dataSource прописывать transactionManager ? Это сообщение отредактировал(а) 4epT - 27.12.2012, 11:27 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |