Caros, eu estou com um problema no @transaction, ele não está garantindo o rollback. Como eu faço uma forma de que ele pegue todas as exceções e nesse caso refaça a transação (não salvar). É possível um exceção ficar silenciosa para ele. O método deveria salvar uma ação no banco se conseguisse mandar uma mensagem também… Que vem de uma outra API .
Não conheço tanto de Java, mas até onde sei deveria considerar qualquer exception lançado. Logicamente nao vai pegar se tiver um try que ignore a exception (sem lançar outro).
Parece que o @Transaction
apenas marca como rolback caso ocorra alguma exceção runtime (unchecked).
1.4.3. Rolling Back a Declarative Transaction
Nesta parte:
In its default configuration, the Spring Framework’s transaction infrastructure code marks a transaction for rollback only in the case of runtime, unchecked exceptions. That is, when the thrown exception is an instance or subclass of
RuntimeException
. (Error
instances also, by default, result in a rollback). Checked exceptions that are thrown from a transactional method do not result in rollback in the default configuration.
Caso vc queira realizar rollback para alguma exceção checada (geralmente, de negócio), vc pode especificar na anotação:
@Transactional(rollbackFor = SuaExcecao.class)