Olá pessoal,
li algumas referências na internet e pelo que entendi, as melhores maneiras de fazer controle de transações + DAO são: utilizando filtro (quando WEB) ou utilizando Spring. Como minha aplicação é WEB, resolvi utilizar filtros que estou mais acostumado a usar e por isso acho mais simples.
Na minha aplicação WEB, meu filtro se encontra assim:
try {
HibernateUtil.beginTransaction();
chain.doFilter(request, response);
HibernateUtil.commitTransaction();
} catch (Exception e) {
HibernateUtil.rollbackTransaction();
} finally {
HibernateUtil.closeSession();
}
Bem, o problema acontece quando venho a utilizar struts, pois eu deveria tratar as excerssões na action e retornar um findForward para o controler. Neste caso, quando a requisição for processada e voltar ao filtro, irá ser dado o commit, já que as excerssões foram tratadas para que possa dar o findForward correto.
A única solução que imaginei foi gravar uma flag quando for dado uma excerssão, e no filtro verificar a mesma para decidir se é pra dar o commit ou o rollback, ao invés de fazer isso num cloco try/catch.
Como achei essa solução muito feia, decidi pedir opiniões aqui na comunidade para saber se algum membro tem uma solução mais plausível.
Estou aberto a sugestões.
Agradeço desde já, um abraço.
PS: Se achou a explicação confusa, me avise para que possa tentar reformular melhor.