powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильный отлов @Transactional(rollbackFor=Exception.class)
12 сообщений из 12, страница 1 из 1
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802025
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть метод, который помечен аннотацией:
Код: java
1.
2.
@Transactional(propagation= Propagation.REQUIRED, rollbackFor=Exception.class)
public methodA()


Возникла ошибка, я вывожу ее описание в блоке catch:
Код: java
1.
При создании клиента произошла ошибка: Duplicate entry 'bla@bla.ru' for key 'email'; SQL [n/a]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException


все круто, но при этом в консоль выводится длинный стек трейс:
Код: java
1.
2.
3.
4.
5.
6.
7.
org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnly
	at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:524)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:757)
	at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:726)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:478)
	at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:272)
	at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)


Нормально ли это? По идее, если я отлавливаю все исключения (Exception.class), в консоле у меня должно выводится то описание, которое я определила в блоке catch(). Поясните плиз. Спасибо
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802033
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Возможно вы поймали исключение внутри транзакции. Поэтому внешний метод не знает, что транзакцию надо откатить и пытается её закомитить.

Покажите где ваш catch-блок находится?
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802120
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulT,

Возможно вы поймали исключение внутри транзакции. Поэтому внешний метод не знает, что транзакцию надо откатить и пытается её закомитить.

Покажите где ваш catch-блок находится?



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
@org.springframework.stereotype.Service
@Transactional
public class AdminService {
....
    @Transactional(propagation= Propagation.REQUIRED, rollbackFor=Exception.class)
    public RegisterClientResponse registerClient(ClientInfo clientModel) {
           try{
}catch(Exception up){
  throw up;
}
}



контроллер:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
@Controller
@RequestMapping("/client")
@Transactional
ClientController
...
@RequestMapping(value = "/register", method = RequestMethod.POST)
    public
    @ResponseBody
RegisterClientResponse register(@RequestBody RegisterClientRequest request) {
RegisterClientResponse response = new RegisterClientResponse();
        try {
            response = adminService.registerClient(request.getClientInfo);
        }catch(Exception z){
             System.out.println("При создании клиента произошла ошибка: " + z.getMessage());
        }
          return response;
    }
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802124
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Ну, вот. У вас
Код: java
1.
2.
@Transactional
ClientController



То есть транзакция начинается контейнером за пределами контроллера. Но вы исключение поймали и не прокинули наверх. Поэтому контейнер попробовал закомитить транзакцию.
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802170
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulT,

Ну, вот. У вас
Код: java
1.
2.
@Transactional
ClientController



То есть транзакция начинается контейнером за пределами контроллера. Но вы исключение поймали и не прокинули наверх. Поэтому контейнер попробовал закомитить транзакцию.
и как это подправить?
сделать throw z в:

@Controller
@RequestMapping("/client")
@Transactional
ClientController
...
@RequestMapping(value = "/register", method = RequestMethod.POST)
public
@ResponseBody
RegisterClientResponse register(@RequestBody RegisterClientRequest request) {
RegisterClientResponse response = new RegisterClientResponse();
try {
response = adminService.registerClient(request.getClientInfo);
}catch(Exception z){
System.out.println("При создании клиента произошла ошибка: " + z.getMessage());
throw z;
}
return response;
}

?
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802186
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTи как это подправить?
сделать throw z в:

Как вариант.
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802234
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulTи как это подправить?
сделать throw z в:

Как вариант.
Попробовала, не получилось.

Код: java
1.
2.
java.lang.NullPointerException
	at ru.services.administration.AdminService.registerClient(AdminService.java:364)



т.е. я специально поставила throw new NullPointerException();
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802320
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
плиз, помогите, последний момент остался разобрать и все.
попробовала по всякому, но при искусственной генерации исключения все равно вываливается стек трейс и ответ не возвращается
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802333
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802335
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTBlazkowiczпропущено...

Как вариант.
Попробовала, не получилось.

Код: java
1.
2.
java.lang.NullPointerException
	at ru.services.administration.AdminService.registerClient(AdminService.java:364)



т.е. я специально поставила throw new NullPointerException();

Вы уверены что именно в этом месте выбрасыается исключение или хотя бы до этого места доходит? Добавьте отладочную информацию и посмотрите что происходит, либо брейкпоинт поставьте...
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802406
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YamahaR1JulTпропущено...

Попробовала, не получилось.

Код: java
1.
2.
java.lang.NullPointerException
	at ru.services.administration.AdminService.registerClient(AdminService.java:364)



т.е. я специально поставила throw new NullPointerException();

Вы уверены что именно в этом месте выбрасыается исключение или хотя бы до этого места доходит? Добавьте отладочную информацию и посмотрите что происходит, либо брейкпоинт поставьте...
доходит и входит до обоих блоков кетч 100%
...
Рейтинг: 0 / 0
Правильный отлов @Transactional(rollbackFor=Exception.class)
    #38802415
YamahaR1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTYamahaR1пропущено...


Вы уверены что именно в этом месте выбрасыается исключение или хотя бы до этого места доходит? Добавьте отладочную информацию и посмотрите что происходит, либо брейкпоинт поставьте...
доходит и входит до обоих блоков кетч 100%

Ну тогда прийдется изучить линку от Blazkowicz :)
Либо можете еще тут посмотреть http://www.mkyong.com/spring-mvc/spring-mvc-exceptionhandler-example/
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильный отлов @Transactional(rollbackFor=Exception.class)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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