Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Правильный отлов @Transactional(rollbackFor=Exception.class) / 12 сообщений из 12, страница 1 из 1
11.11.2014, 13:34
    #38802025
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
Есть метод, который помечен аннотацией:
Код: 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
11.11.2014, 13:39
    #38802033
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
JulT,

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

Покажите где ваш catch-блок находится?
...
Рейтинг: 0 / 0
11.11.2014, 14:21
    #38802120
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
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
11.11.2014, 14:24
    #38802124
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
JulT,

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



То есть транзакция начинается контейнером за пределами контроллера. Но вы исключение поймали и не прокинули наверх. Поэтому контейнер попробовал закомитить транзакцию.
...
Рейтинг: 0 / 0
11.11.2014, 14:44
    #38802170
JulT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
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
11.11.2014, 14:49
    #38802186
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильный отлов @Transactional(rollbackFor=Exception.class)
JulTи как это подправить?
сделать throw z в:

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

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

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



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

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

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



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

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

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

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



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

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


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

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


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