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

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

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

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

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

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

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

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

Код: 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
Spring AOP непонятки
    #39330357
natanabrahamjr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно могу в трайкеч всю требуху внутри обернуть, но мне кажется это не очень верный подход.
...
Рейтинг: 0 / 0
Spring AOP непонятки
    #39330382
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
natanabrahamjrда там собссно нечего показывать так то..
Ну, тогда можно и закончить обсуждение.

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

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

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

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


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