Controle as configurações de transação interna da transação externa com a mola 2.5
-
27-09-2019 - |
Pergunta
Estou usando o Spring 2.5 Transaction Management e tenho a seguinte configuração:
Bean1
@Transactional(noRollbackFor = { Exception.class })
public void execute() {
try {
bean2.execute();
} catch (Exception e) {
// persist failure in database (so the transaction shouldn't fail)
// the exception is not re-thrown
}
}
Bean2
@Transactional
public void execute() {
// do something which throws a RuntimeException
}
A falha nunca é persistida em dB de Bean1 porque toda a transação é revertida.
Eu não quero adicionar Norollbackfor No Bean2, porque é usado em muitos lugares que não têm lógica para lidar com exceções de tempo de execução corretamente.
Existe uma maneira de evitar que minha transação seja revertida apenas quando o bean2.Execute () é chamado de Bean1?
Caso contrário, acho que minha melhor opção é persistir minha falha dentro de uma nova transação? Alguma coisa limpa eu posso fazer?
Solução
Esta é uma das advertências das anotações ... sua classe não é reutilizável!
Se você configurar suas transações no XML, se tivesse sido possível.
Supondo que você use a configuração XML: se não estiver consumindo recursos caros, você pode criar outra instância do Bean2 para o uso do código especificado. Ou seja, você pode configurar um como especificado acima e um sem reversão para exceção.