Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring AOP непонятки / 14 сообщений из 14, страница 1 из 1
19.10.2016, 20:38
    #39330162
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
Такой вопрос. Есть некий метод, метод под транзакцией. Я создаю аспект, вешаю его на этот метод как исполниться после.

аспект выбрасывает ексепшн. и.... транзакция основного метода так же откатывается! т.е. выходит, что мой аспект висит внутри транзакции основного метода. как так? :(
...
Рейтинг: 0 / 0
19.10.2016, 21:17
    #39330175
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjr,

Транзакции сами по себе реализованы через AOP. Интерцептор\прокси для управления транзакциями оборачивает целевой метод и пр выбросе RuntimeException откатывает транзакцию. Откуда ему знать кто именно там внутри выбросил исключение, сам целевой метод или другой аспект. Важен только тот факт что исключение было выброшено.
...
Рейтинг: 0 / 0
19.10.2016, 21:59
    #39330194
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
да. но я ожидал активити аспекта так, что он запускается ПОСЛЕ завершения базового метода и закрытия егошней (сорри за это слово) транзакции. т.е. транзакция откр - базовый метод - транзакция закр - транзакция откр - аспект - транзакция закр.

а иначе какой от них толк?

И вообще как-то не логично например, выглядит если базовый метод внутри своей транзакции кидает ексепшн, я аспектом его ловлю, и там открываю-закрываю транзакцию. и всё ок. отрабатывает.

Хорошо, тогда возможно как то стандартными средствами разорвать транзакцию базового метода и в аспекте зарядить свою? Дабы завалившийся аспект не порушил основной метод?
...
Рейтинг: 0 / 0
20.10.2016, 08:17
    #39330275
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjr,

Покажите что ли код.
- Scope транзакции ограничен именно этим методом?
- Нужно как-то сказать аспекту, чтобы он использовал не сам бин, а уже прокси с транзакционной оберткой над ним.
...
Рейтинг: 0 / 0
20.10.2016, 09:45
    #39330352
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
да там собссно нечего показывать так то..

есть метод помеченный аннотацией транзакшнл, а есть аспект повешенный на "послеИсполнения".

Код: java
1.
2.
3.
4.
5.
6.
7.
 @AfterReturning(
            pointcut = "execution(* com.xxx.service.xxxserviceImpl.expirePaymentTransaction(..))",
            returning = "result"
    )
    public void xxxxxxGeneralPaymentExpiredActivity(JoinPoint joinPoint, Object result) {
     throw new RuntimeException();
}
...
Рейтинг: 0 / 0
20.10.2016, 09:49
    #39330357
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
Я конечно могу в трайкеч всю требуху внутри обернуть, но мне кажется это не очень верный подход.
...
Рейтинг: 0 / 0
20.10.2016, 10:10
    #39330382
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjrда там собссно нечего показывать так то..
Ну, тогда можно и закончить обсуждение.

natanabrahamjrесть метод помеченный аннотацией транзакшнл, а есть аспект повешенный на "послеИсполнения".

Вы проигнорировали вопрос про scope транзакции. Может у вас транзакция началась за пределами этого метода вообще. Откуда нам знать?
...
Рейтинг: 0 / 0
20.10.2016, 10:16
    #39330390
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjrЯ конечно могу в трайкеч всю требуху внутри обернуть, но мне кажется это не очень верный подход.
У вас проблема в порядке навешивания аспектов на метод.
Посмортрите в мануале Spring
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html
про Ordering
Не скажу точно как именно в вашем примере его прилепить.
...
Рейтинг: 0 / 0
20.10.2016, 10:35
    #39330404
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
BlazkowiczВы проигнорировали вопрос про scope транзакции. Может у вас транзакция началась за пределами этого метода вообще. Откуда нам знать?
ааааааааааааааааа. Теперь я Вас понял. Спасибо, гляну. т.е. может действительно такое быть что тот метод покрыт другой транзакцией.
...
Рейтинг: 0 / 0
20.10.2016, 10:39
    #39330408
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjrааааааааааааааааа. Теперь я Вас понял. Спасибо, гляну. т.е. может действительно такое быть что тот метод покрыт другой транзакцией.
Нет. Это та же транзакция. Просто @Transactional имеет по-умолчанию propagation=REQUIRED. Это значит что, возможно, этот метод не создаёт транзакцию, а использует уже существующую, тогда упорядочивание аспектов вообще никак не поможет.
...
Рейтинг: 0 / 0
20.10.2016, 20:06
    #39331040
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
я так понимаю что если внутри транзакционного метода я дергаю второй метод с транзакцией реквайрд-нью, и вешаю уже на него аспект, то по-идее должно сработать? он же ексепшн кинет в контексте того метода? В общем, надо попробовать. )) думаю, что один фиг завернтет покрывающую их транзакцию.
...
Рейтинг: 0 / 0
20.10.2016, 20:08
    #39331041
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
natanabrahamjrя так понимаю что если внутри транзакционного метода я дергаю второй метод с транзакцией реквайрд-нью, и вешаю уже на него аспект, то по-идее должно сработать? он же ексепшн кинет в контексте того метода? В общем, надо попробовать. )) думаю, что один фиг завернтет покрывающую их транзакцию.
Тогда нужно явно указывать порядок аспектов.
...
Рейтинг: 0 / 0
21.10.2016, 22:10
    #39331963
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
Blazkowicznatanabrahamjrя так понимаю что если внутри транзакционного метода я дергаю второй метод с транзакцией реквайрд-нью, и вешаю уже на него аспект, то по-идее должно сработать? он же ексепшн кинет в контексте того метода? В общем, надо попробовать. )) думаю, что один фиг завернтет покрывающую их транзакцию.
Тогда нужно явно указывать порядок аспектов.

продолжаю пляски с бубном ))) Указал ордеринг, ставлю ордер ноль - выполняется внутри той же транзакции после метода над которой он стоит навешан аспект... Ставлю ордер-1 -- и... Алллиллуя! (почти) -- первая транзакция закрывается, во второй можно кидать эксепшн и всё хорошо - всё отразилась.... НО. теперь самое интересное - вторая транзакция то... НЕ ЗАКРЫВАЕТСЯ. т.е. она висит вечно. чтоб изменения появились - надо делать сейвэндфлюш. Но это ясно не дело, т.к. транзакция всё-равно открыто.

что за... магия?
...
Рейтинг: 0 / 0
21.10.2016, 22:16
    #39331968
natanabrahamjr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring AOP непонятки
да, с пропагейшенами @Transactional в аспекте тоже пытался играть - толку нет.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring AOP непонятки / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]