Когда использовать распространение @ Transactional = Proagation.REQUIRES_NEW? - PullRequest
4 голосов
/ 15 июля 2011

Мой вопрос прост и почти уже сформулирован в заголовке: существует ли конкретный шаблон / сценарий использования, в котором можно было бы сказать, что вместо распространения по умолчанию следует использовать @Transactional (распространение = Proagation.REQUIRES_NEW)?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 15 июля 2011

Написание контрольного журнала. Вы хотите зафиксировать тот факт, что кто-то пытался что-то сделать независимо от того, удалась или не прошла основная транзакция (и, следовательно, получен откат).

4 голосов
/ 15 июля 2011

К конкретным случаям применения относятся сценарии, в которых необходимо выполнить какую-то работу в методе и зафиксировать ее перед продолжением существующей транзакции.

"Аудит" (а не ведение журнала) вызовов методов, например, представляет собой сценарий, в котором вы хотите зафиксировать запись аудита независимо от того, будет ли существующая бизнес-транзакция завершена или откат в конце.

Другим сценарием может быть случай, когда у вас есть несколько бизнес-транзакций, которые вызываются из фасада, и каждый такой вызов должен зафиксировать свою работу перед возвратом управления на фасад. Этот сценарий встречается довольно редко, но вы можете найти его в системе рабочего процесса, которая создает свою собственную транзакцию (где записи записываются о ходе рабочего процесса), а вызовы других компонентов, находящихся в том же приложении, должны происходить в отдельных транзакциях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...