2
respostas

Em que situações uma transação do tipo NOT_SUPPORTED deve ser usada na prática?

Trabalhei em um projeto grande em que o arquiteto definiu que deveríamos anotar como NOT_SUPPORTED todos os métodos que fossem apenas uma consulta no banco de dados. Isto sempre funcionou e eu nunca entendi por que funcionava e muito menos o porquê desta decisão dele.

No meu entendimento uma query (sem INSERT, UPDATE ou DELETE) também é uma transação aberta com o banco de dados. Por que isto funciona?

E uma vez que consideramos que, sim, funciona, vocês saberiam dizer por que este arquiteto poderia ter considerado que isto era uma boa prática? Traz alguma melhora de performance ou coisa do gênero?

2 respostas

Oi Denis,

Basicamente, quando usamos NOT_SUPPORTED estamos aumentando o desempenho da operação no banco de dados. É muito utilizado em todos os métodos de negócios que usem select ou find , cujo propósito é talvez preencher uma tabela de dados na tela. Quando usamos NOT_SUPPORTED como anotação de um método o container garante que o método nunca será executado em uma transação. Se o chamador tentar invocar o método dentro de uma transação, o contêiner suspenderá a transação do chamador, executará o método e, em seguida, retomará a transação do chamador.

Otávio, muito obrigado pelo esclarecimento. Mas eu continuo com dúvida e a minha impressão é de que tem algo mais básico que eu talvez nunca tenha entendido direito e eventualmente mais teórico: fazer uma operação de select na base então NÃO é considerado uma transação? Ou é um tipo diferente de transação?