Boa noite pessoal,
Estou com um problema no gerenciamento de transações pelo Spring.
Suponha o seguinte código:
public class MyService {
@Transactional
public void methodA() {
...
for( Object o : objects ) {
try {
methodB(); // chamada pelo this, não passa pelo proxy do Spring, não gera transaction
} catch( Exception ex ) {
logException( ex );
}
}
...
}
@Transactional
public void methodB( Object o ) throws Exception {
...
}
}
Minha necessidade é que o método B rode em uma transação separada da transação do método A, de forma que uma exception no método B gere um rollback apenas nas operações do método B e que esta exception seja logada.
O seguinte código invoca o método A (via proxy), porém a chamada interna ao método B não passa pelo proxy, consequentemente não criando uma nova transação para o método B.
MyService srv = (MyService) ApplicationContext.getBean("myService");
srv.methodA();
Já tentei configurações usando SpringAOP e também TransactionProxyFactoryBean e nada. Gostaria de resolver esse problema de forma a gerar menor impacto no código da classe MyService, tornando-a o mais independente possível de um framework. Quais as sugestões?
Agradeço pela atenção!