Aqui eu sei que o foco não é esse, mas no mundo real, não é uma boa ter transação de banco com uma operação de IO, por exemplo gravação de arquivo. Normalmente vcs separariam no MB um método a, que chama o método b (gravação do arquivo) e que depois chama o método c (transacional)?
Nesse caso se estourasse erro no método b (gravação de arquivo) a transação nem começaria. E se gravasse o arquivo (método b) e desse erro na hora de salvar no banco de dados (método c) em tese deveria desfazer o que foi feito no método b (gravação de arquivo). É mais ou menos isso que vcs fariam?