транзакция отката при сопоставлении исключения с ответами с помощью Jersey ExceptionMapper - PullRequest
2 голосов
/ 06 марта 2019

Я использую пользовательский Jersey ExceptionMapper для сопоставления моих непроверенных исключений с ответами об ошибках (как описано в документации ). Моя проблема в том, что транзакция не откатывается, каждая модификация БД, выполненная до сохранения исключения.

То же самое происходит, если вместо использования ExceptionMapper я выбрасываю исключение WebApplicationException.

Как я могу отправить клиенту ответ об ошибке, сохранив нормальное поведение (откат транзакции)? Я нашел похожий вопрос здесь , но я не использую пружину.

1 Ответ

1 голос
/ 07 марта 2019

Что вы можете сделать, это использовать RequestEventListener для управления транзакцией в течение всего срока действия запроса. Вы можете прослушивать RequestEvent.Type s , который включает в себя такие события, как RESOURCE_METHOD_START, ON_EXCEPTION, RESOURCE_METHOD_FINISH и т. Д. Вы можете начать транзакцию в начале обработки запроса и зафиксировать или откатить транзакция в зависимости от того, была ли выполнена успешная обработка или возникла исключительная ситуация.

Это в значительной степени то, что Dropwizard делает со своим @UnitOfWork. Вы можете увидеть, как все это реализовано в этом пакете . Посмотрите на UnitOfWorkApplicationEventListener. Вы увидите, как они реализуют то, о чем я говорил выше.

...