Primeiro de tudo, o gerenciamento de transações deve ser feito na camada de serviço, e não na camada DAO, pois isso criaria muita sobrecarga de desempenho (para lidar com o nível de isolamento de transação apropriado e a propagação em cada método diferente). Além disso, o escopo de uma unidade de trabalho vem da camada de serviço, e não da camada de acesso a dados: imagine executar um processo de negócios que precise lidar com 2 ou mais DAOs.
Há muita discussão na Internet que aponta nessa direção, como aqui , aqui e aqui .
De qualquer forma, já que é uma entrevista, vamos aceitar a pergunta como ela é. Do meu ponto de vista, você usaria a @Transactional
anotação (ou a configuração XML) nos dois métodos e com uma propagação de transação com REQUIRED
valor. Dessa forma, quando qualquer um desses métodos for chamado e se nenhuma transação anterior existir, uma nova transação será criada:
@Transactional
class MyDAO {
@Transactional(propagation = REQUIRED)
public void foo() {
}
@Transactional(propagation = REQUIRED)
public void bar() {
}
}
foo()
ebar()
compartilha a mesma transação e, se 1 falhar, outro 1 também reverterá? Você pode fornecer algum esclarecimento?