Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring и глобальные транзакции 
:(
    Опции темы
4epT
Дата 26.12.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



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

У меня в пределах одной транзакции идет работа с mongodb, redis и  rabbitmq.

Объявляю бины:

Код

@Bean
    public UserTransactionManager userTransactionManager(){
        UserTransactionManager userTransactionManager = new UserTransactionManager();
        return userTransactionManager;
    }

    @Bean
    public UserTransactionImp userTransactionImp(){
        return new UserTransactionImp();
    }

    @Bean
    public JtaTransactionManager jtaTransactionManager(){
        JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
        jtaTransactionManager.setTransactionManager(userTransactionManager());
        jtaTransactionManager.setUserTransaction(userTransactionImp());
        return jtaTransactionManager;
    }


Добавил tx:annotation-driven:

Код

@Configuration
@EnableTransactionManagement
public class SpringConfiguration {
...


Приложение стартует нормально. Специально тушу rabbit  (то есть упадет эксепшен Connection refused). Изменения не откатываются. Метод помечен как:

Код

@Transactional

PM MAIL   Вверх
MisterCleric
Дата 26.12.2012, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет.
А этот Exception Runtime? Только Runtime приводят к автоматическому ролл-бэк транзакции

И как-то ты все сложновато настроил.
Может этого будет достаточно:
Код

        <tx:jta-transaction-manager/>

    <tx:annotation-driven/>

Где первый создас бин типа JtaTransactionManager с имененм "transactionManager"
А второй сдеай, то что ты уже знаешь: разрешит использовать @Transactional
Но все это будет работать, если ты подымаешь свое приложение под сервером прложений: JBOSS, WAS, WebLogic.
Или давай не так: что это за классы: UserTransactionManager, UserTransactionImp?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 26.12.2012, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Эксепшен не Runtime ) может быть в этом и проблема.

У меня весь конфиг спринга вынесен из xml (xml не использую вообще), можно эти (<tx:jta-transaction-manager/> <tx:annotation-driven/>) настройки прописать аннотациями ? или вынести в xml и сделать @ImportResource ?

Используется jetty.

Цитата

Или давай не так: что это за классы: UserTransactionManager, UserTransactionImp? 


Это из atomikos.
PM MAIL   Вверх
MisterCleric
Дата 26.12.2012, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

 или вынести в xml и сделать @ImportResource ?

и
Цитата

Это из atomikos. 

Тогда все нормально: пусть будет в аннотациях.

Так что там у тебя с Runtime?

Не в тему: а как используешь Srping Integration без XML  smile ?


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 26.12.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Выкинул Runtime эксепшен, картина не изменилась, данные из базы не подчистились.

Цитата

Не в тему: а как используешь Srping Integration без XML   ? 


Ну для mongodb использую SpringData, то есть mongoTemplate и SimpleMongoDbFactory.
Для redis использую jedis и его конфигурацию через Spring.

Или это не Spring integration ?

PM MAIL   Вверх
MisterCleric
Дата 26.12.2012, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

Выкинул Runtime эксепшен, картина не изменилась, данные из базы не подчистились.

Ты же всем своим ресурсам должен указать один и тот же transactionManager...
Не достаточно просто @Transactional. Все эти ресурсы должны знать в рамках, какого transactionManager жевет ихняя транзакция. Иначе они сами за тебя это решат в рамках своих локльных транзакционных вохможностей.

Цитата

Или это не Spring integration ?


Нет. Я тебе в предыдущей теме давал ссылку


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 26.12.2012, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Цитата

Ты же всем своим ресурсам должен указать один и тот же transactionManager...
Не достаточно просто @Transactional. Все эти ресурсы должны знать в рамках, какого transactionManager жевет ихняя транзакция. Иначе они сами за тебя это решат в рамках своих локльных транзакционных вохможностей.


Ну для локальных транзакций там прописывается dataSource к которому "принадлежит" этот transactionManager, а для глобальных я читал что просто объявляется JtaTransactionManager и все ...

Как тогда прописать моим ресурсам transactionManager ? если я правильно понял, то ресурсы это mongodb, redis и rabbimq ?

Ну и к слову я сейчас вообще сильно сомневаюсь в надобности использования JTA, так как говорят что производительность из за этого очень сильно скачет, легче уже тогда енаписать свой rollback...

Цитата

Нет. Я тебе в предыдущей теме давал ссылку 


Да, то я не правильно посмотрел в первый раз ... теперь понял что имеется ввиду. В начале смотрел на это, но потом как то забыл, нужно будет еще раз глянуть )

Это сообщение отредактировал(а) 4epT - 26.12.2012, 19:00
PM MAIL   Вверх
MisterCleric
Дата 26.12.2012, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Где у тебя проблема с ролл-бэком?
Основная парадигма, что все NoSQL не поддерживают транзакции  smile 
Но по Mongo вот, что я нашел: http://docs.mongodb.org/manual/tutorial/pe...-phase-commits/


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
4epT
Дата 26.12.2012, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 784
Регистрация: 13.8.2007

Репутация: 3
Всего: 3



Проблема в том что ролбек не работает ) и это наверное из за:

Цитата

Основная парадигма, что все NoSQL не поддерживают транзакции   


так что наверное напишу свою реализацию ролбек и все.


И кстати, ведь при объявлении бина JtaTransactionManager, ему не нужно прописывать ресурсы с какими он работает, почему тогда:

Цитата

Ты же всем своим ресурсам должен указать один и тот же transactionManager...
Не достаточно просто @Transactional. Все эти ресурсы должны знать в рамках, какого transactionManager жевет ихняя транзакция. Иначе они сами за тебя это решат в рамках своих локльных транзакционных вохможностей.


Допустим я использую SQL решения, мне нужно будет моим dataSource прописывать transactionManager ?

Это сообщение отредактировал(а) 4epT - 27.12.2012, 11:27
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0943 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.