1
resposta

JDBC - Transação

Existe alguma forma elegante em uma aplicação de as transações via JDBC serem fechadas fora do DAO?

Exemplo:

ProcessoBO (cadastra um processo) AuditoriaBO (cadastra uma auditoria vinculada a um processo) MonitorBO (atualiza um monitoramento do usuario do processo)

Dentro de cada classe de serviço, eu possuo, respectivamente, um ProcessoDAO, AuditoriaDAO, MonitorDAO.

Dentro de cada DAO, eu inicializado a inicio e fecho (rollback e commit) a transação corrente.

Mas caso eu tenha um problema, por exemplo, no MonitorBO, meu processo e auditoria foram cadastrados.

Eu não tenho, aqui, o conceito do tudo ou nada. (ACID)

E, claramente, esse MonitorBO, AuditoriaBO podem ser chamados por outros casos de uso, ou seja, eu não tenho controle de quando cada caso de uso acha que é necessário fechar a transação ou não.

Infelizmente, esse é um projeto muito antigo e que esse tipo e coisa gera diversos transtornos.

Em aplicações mais novas, usando spring ou ejb, temos @transacional e o problema é resolvido tranquilamente.

Mas como eu conseguiria resolver isso "na mão"? Em casos usando apenas JDBC PURO.

Alguém pode me ajudar a clarear uma solução?

1 resposta

Oi Rachel. Uma tentativa seria o open Sessions in views. Na tela você pode usar um filtro que abre uma transação e na volta dele fecha ou da rollback